Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvpj7-0005if-7w for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jun 2021 23:22:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lvpj5-0001Ph-Qt for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jun 2021 23:22:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvpj5-0001PZ-Hz for pgsql-hackers@lists.postgresql.org; Tue, 22 Jun 2021 23:22:39 +0000 Received: from mail-dm6nam11on20618.outbound.protection.outlook.com ([2a01:111:f400:7eaa::618] helo=NAM11-DM6-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvpj2-0000NE-Qu for pgsql-hackers@postgresql.org; Tue, 22 Jun 2021 23:22:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jpO8SaVV4d6p2dKPOTUL4pGzdjHzix9GtP1OzrapHYrFuV4Q9VH0YlbCZwYewOh1C3fUqvyZpNq8oLx1Jq//xWQQMkFIU8Lbg0JFwEE6gwkyOJrCIEoTE5CyWq96H/3FuKE9/GFpO0E5IcO+1WQ15QdRKORsadp1sJymXj+jSf7ZlQaz0azogbL84dNmGRrlAdnOlhLWVlykrBcVsok7XvCK1aehoe/+xcdvH6KUQUOD7h39rXLYIPx/DZrAZNAIO33n2u3EXeL3Bd0OvfYR3N/GPZ0NHl0tAkJxQqbxyKXXszLRoXgD5QuUSj3ot8ITloAIe2lHenBPAr3bAhcdPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rzLReU9FEV6uEnUUoTv8TL2CUvE7Ftk14T1idtMumCY=; b=VhhpFiI8Fcxjc18OSU7r5l17YgoYloCx7jwDIX/FtgNt49aD29u14ZC9aHG3BSu2e6Lfqb5CJ5kKAodlSv9X58ajoS/5Ai+WrJpRRopM2BixiRVhqoeq7owqC2Q0pT5LpEXMej0f4+xvMON0PFaMXzF6olwQX91bTTgUzheR7H2bl57sOj8D+AjD47xiunNdTv+Ut25nIv0O8qP/z0Fqmj/76FLL2ARFXwu1imHaLVOrAKFEruPHyN6ukcs+gVpVusjkTPx4tgXMz+COAnj7vzcU7bwyklCMtaFsOAPFtw/nM/Y1Px3wp2GlsjoZcxhlpspkyupUMGit2YYfPZKXwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vmware.com; dmarc=pass action=none header.from=vmware.com; dkim=pass header.d=vmware.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rzLReU9FEV6uEnUUoTv8TL2CUvE7Ftk14T1idtMumCY=; b=EfocNr/J7ruokSKtfFLNg5icJLw+LwhoDENTm4mwlKreTh1hyCaiFnA9PZlxrId+kFimlYlSUvhlZIfe3t+sXvh7o/ExcWlT980pJH98IjoYFReNlrJQPZtLblDJkB25qDy23brfvgxAJvyxXqAVTQQVLmCjJ8Er21WsmIr1qH0= Received: from MWHPR05MB2896.namprd05.prod.outlook.com (2603:10b6:300:65::20) by CO1PR05MB8299.namprd05.prod.outlook.com (2603:10b6:303:fe::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.16; Tue, 22 Jun 2021 23:22:32 +0000 Received: from MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::59e1:5f08:31c6:1d3]) by MWHPR05MB2896.namprd05.prod.outlook.com ([fe80::59e1:5f08:31c6:1d3%9]) with mapi id 15.20.4264.018; Tue, 22 Jun 2021 23:22:32 +0000 From: Jacob Champion To: "hlinnaka@iki.fi" , "pgsql-hackers@postgresql.org" Subject: Re: [PoC] Federated Authn/z with OAUTHBEARER Thread-Topic: [PoC] Federated Authn/z with OAUTHBEARER Thread-Index: AQHXXISc0BUwpEo1NUi6cD0VutaLHasZf38AgAdCaoA= Date: Tue, 22 Jun 2021 23:22:31 +0000 Message-ID: <2f06a4aef1d5defe4b7aaec01478572e5557d32a.camel@vmware.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: iki.fi; dkim=none (message not signed) header.d=none;iki.fi; dmarc=none action=none header.from=vmware.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 52fa5acf-2808-4393-a8c0-08d935d49c54 x-ms-traffictypediagnostic: CO1PR05MB8299: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hog7n7qyYgViUBhiksXW0GCNHw72+1YdEM6uMtw6Itv5hB3zf1Fn9XS+7qTl1zhbCow1111YcaCckCPgSLMPlrn89PGgF5r+Lj2z7J58QAI89kM3Uup6SeQB8rD6gIAz7BIyBaJU5EbfueZKWNdlh95xdCZVdLTVrHcWw/3Uc1v09eTqh++vjNBcFZrNG8F5eaMR8iTd9gki22g8nzTZBcgACQqR/TgiyVjzd864QhARbXGm4Uq4wTLlpwBHAsChL52ASUKP+Kfi5NHLqgnSLNJnxn2O0kk2PwGAGc3NUHEFa5eg5T7zg/w99jY+gN2WSuVUFth77bSJutmTBIuJHFIH02g2CUEhRaKTl8YL8o0ocEAUrpnbtB+OEhwNX4IVWHMd0uf/xvdlJaV52J4ajzMpmS345mvIHD+o3e/8hOLHVmgi157wwuwr0HEWB+J+Mewg6Ow4YitCri9lAeDJ3FR9QOagPbqIORDJSaes43g8lTtUH2GoyBsAF4WVbYzI7dnj9Zdzu9p0Vt8vMpMpOp+S6Xg8ykmILXEk6asXdnLwGpGq5gKE+ZZFVGNsRI+DCM9aOasdDJ6ioaN/UTWNIQ8BBvk21wLzUxw68lcbd0I= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR05MB2896.namprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(366004)(346002)(396003)(39860400002)(36756003)(53546011)(6506007)(8936002)(86362001)(8676002)(186003)(110136005)(478600001)(122000001)(5660300002)(71200400001)(26005)(316002)(76116006)(2906002)(6512007)(66946007)(66476007)(66446008)(66556008)(64756008)(6486002)(66574015)(38100700002)(83380400001)(2616005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZjZiNWhhTHFIc0tpUExvTE85QVB2S0hmSld6WWJOYmVDRGhkNUlCNkJBMnNU?= =?utf-8?B?c1p3bFNXYXo4bjZPR0p2Z3A5OHIvSExMcHBiSlc3MVQxTGp3aDRwNWZBU2Zu?= =?utf-8?B?ak5LdThwcGd6bHdRSGRncXFXZnlaV0QrbzZ1S1VCejFjMnhBM2JLUDhXcEww?= =?utf-8?B?NGMwQmlZenFJR0JMREJ0U3NORmovMHN3UEhiZ0Y1WWZFT29jTUtia3U0cXgw?= =?utf-8?B?R01xOEhiQUlyT2JCbFEyM3Y4ckc5Y1pDbmJLbHRZaytCNURYTExUa3JMTDFI?= =?utf-8?B?VEdGRlBMaEkweUIxVFgvYUtyMTg5WUFzTzlnUCtaUDEvYkZjbk1rWjJFSFht?= =?utf-8?B?cmhGMUZNOWwwUXhtbmM2UTNPUHFUb0JLdXVRM1Rabk1iRzJBWUIzTDFPK0Y1?= =?utf-8?B?bWJTN0w4RVhZazkrdGxzTFA4cWo3c1JLMnF5aHIzY2tMcE95OXlGZitMdW5N?= =?utf-8?B?akVJNkJUK2xnd0YwcUpYR2lwTzd0RUE3UkJST2ltSFdydi9mOEw1UmZ1anZZ?= =?utf-8?B?Q3J6bjl5b21nZkFEdlE0RStDbEUveUdjSU8vN2FHaUFTTTdFcE1BaHVPNThh?= =?utf-8?B?b3dnVHBsVFJQS0tVLzFYS09zeWRUdFUvZXdnWFYyRE41YWlhWWxxTml1RHlh?= =?utf-8?B?STB0OUV6Y3BQdEowUVdLbm9MUGYyYVB5WjduVXNKS21WYWs2d0U3TnVGY1pJ?= =?utf-8?B?cmJEN0hlQ05BV1ZvcXc5dGQ4WmEvZjg2TlAyaGp0UFM1U0ROODQwVTc4dC84?= =?utf-8?B?NnBiYlZxMC9wUFNucWZSdDhMZVhFTjlyUE9PS0JpTktQbWJIY1dXd0NBOUNU?= =?utf-8?B?U0k3WDhPdjd6eHRVNml5ejhMbzJneTM0cHNEb1lZdzk2OGJBaEE5RjRPazho?= =?utf-8?B?NXdzNUlKcXFVdE5hS3IySjhOMzErS1JVZXI1cWo1YjQrTkVraVlDT2wxREJh?= =?utf-8?B?Nlh5blVxTHNheERyeHJvTVhoeGlCOTlEUlV1UmxCa1NUb3ltMTBma1RXbmpq?= =?utf-8?B?TjZTWVdEaXU2K3phRXBSWW11NW5CUjJoL1p2cy9pNEcyNFU2Wm5sN0tCOVEy?= =?utf-8?B?YVYyT1ZaT0lWdXEyMk9vNnRlRERROTZlcUE4VEQwcDZreVlyaVhNZ3c2eG5W?= =?utf-8?B?bzZUQ0JhbWd2OHBWT3B5S2JjenkyR1RhK29sMnMvRnNoWGZjMUJkOWZjS094?= =?utf-8?B?ZktTQ2M3dXZ1bGpCbWNFZ1YreFNuSDRUL1grNERVN0cxSE5TRFhlbnRod0VI?= =?utf-8?B?RlJ5OGh3Z3g3bEhFWUhaT0w5ZlFEL3ZYM3RybmpTeWVaa0xhNmx4VlNIRGZO?= =?utf-8?B?MnBXUURvTzZIcTNWRUZtTzRadGRFTnlrMkU3UVJ2ZUVad2tPYlVpMjdWd2lt?= =?utf-8?B?ckI0WWZTWExyRzhqWmVNdGcrTGJmNUF0elN0SENQUGlyNm5vSFpHUDRTSFAz?= =?utf-8?B?YUFBdWNYWTJ1OWVDMmNpVDdxQktBVDU5Sjg0VDR4TE1BYXNwS1VYMjhGOE5X?= =?utf-8?B?OWtaSFVid3Z4K2RpczVKNGR3K0c5b0JWWkJNSmR6V0hmaWsxVEJObG9jM2po?= =?utf-8?B?VzN1R2RkWVRESlpQTVp0cEMyenM2OE5YK2NlSDRiQmUxTG0ydTVTR1FUYjlI?= =?utf-8?B?cm5MT1V0c3NUTExzd1dkc2xoQTVUN3EzYnlYdjR4d0pIeUhacW1BZFU0NGJz?= =?utf-8?B?VVR0U0w2Mk12N3laQkU2VHdqSmN6SVQxWnpob0NJYjhLMW9tVGdkdjFIZ2Vx?= =?utf-8?Q?C97oT2/fqf2nu9W2+dBzDQgSxF1/S1vSNye34Pf?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR05MB2896.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52fa5acf-2808-4393-a8c0-08d935d49c54 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jun 2021 23:22:32.0159 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RwpjjMAjHBSV2CjyqMLqTiUbEnr8kcvH5UGQwwbdTIKj3aaNvhILzHapEm5d6D25wDz/a7ZgB7j70on/NemdAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR05MB8299 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk T24gRnJpLCAyMDIxLTA2LTE4IGF0IDExOjMxICswMzAwLCBIZWlra2kgTGlubmFrYW5nYXMgd3Jv dGU6DQo+IE9uIDA4LzA2LzIwMjEgMTk6MzcsIEphY29iIENoYW1waW9uIHdyb3RlOg0KPiA+IFdl J3ZlIGJlZW4gd29ya2luZyBvbiB3YXlzIHRvIGV4cGFuZCB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0 eSBhdXRoDQo+ID4gbWV0aG9kcyB0aGF0IFBvc3RncmVzIHByb3ZpZGVzLiBTb21lIGV4YW1wbGUg dXNlIGNhc2VzIG1pZ2h0IGJlICJJIHdhbnQNCj4gPiB0byBsZXQgYW55b25lIHdpdGggYSBHb29n bGUgYWNjb3VudCByZWFkIHRoaXMgdGFibGUiIG9yICJsZXQgYW55b25lIHdobw0KPiA+IGJlbG9u Z3MgdG8gdGhpcyBHaXRIdWIgb3JnYW5pemF0aW9uIGNvbm5lY3QgYXMgYSBzdXBlcnVzZXIiLg0K PiANCj4gQ29vbCENCg0KR2xhZCB5b3UgdGhpbmsgc28hIDpEDQoNCj4gPiBUaGUgaWRkYXdjIGRl cGVuZGVuY3kgZm9yIGNsaWVudC1zaWRlIE9BdXRoIHdhcyBleHRyZW1lbHkgaGVscGZ1bCB0bw0K PiA+IGRldmVsb3AgdGhpcyBwcm9vZiBvZiBjb25jZXB0IHF1aWNrbHksIGJ1dCBJIGRvbid0IHRo aW5rIGl0IHdvdWxkIGJlIGFuDQo+ID4gYXBwcm9wcmlhdGUgY29tcG9uZW50IHRvIGJ1aWxkIGEg cmVhbCBmZWF0dXJlIG9uLiBJdCdzIGV4dHJlbWVseQ0KPiA+IGhlYXZ5d2VpZ2h0IC0tIGl0IGlu Y29ycG9yYXRlcyBhIGh1Z2Ugc3RhY2sgb2YgZGVwZW5kZW5jaWVzLCBpbmNsdWRpbmcNCj4gPiBh IGxvZ2dpbmcgZnJhbWV3b3JrIGFuZCBhIHdlYiBzZXJ2ZXIsIHRvIGltcGxlbWVudCBmZWF0dXJl cyB3ZSB3b3VsZA0KPiA+IHByb2JhYmx5IG5ldmVyIHVzZSAtLSBhbmQgaXQncyBmYWlybHkgZGlm ZmljdWx0IHRvIGRlYnVnIGluIHByYWN0aWNlLg0KPiA+IElmIGEgZGV2aWNlIGF1dGhvcml6YXRp b24gZmxvdyB3ZXJlIHRoZSBvbmx5IHRoaW5nIHRoYXQgbGlicHEgbmVlZGVkIHRvDQo+ID4gc3Vw cG9ydCBuYXRpdmVseSwgSSB0aGluayB3ZSBzaG91bGQganVzdCBkZXBlbmQgb24gYSB3aWRlbHkg dXNlZCBIVFRQDQo+ID4gY2xpZW50LCBsaWtlIGxpYmN1cmwgb3IgbmVvbiwgYW5kIGltcGxlbWVu dCB0aGUgbWluaW11bSBzcGVjIGRpcmVjdGx5DQo+ID4gYWdhaW5zdCB0aGUgZXhpc3RpbmcgdGVz dCBzdWl0ZS4NCj4gDQo+IFlvdSBjb3VsZCBwdW50IGFuZCBsZXQgdGhlIGFwcGxpY2F0aW9uIGlt cGxlbWVudCB0aGF0IHN0dWZmLiBJJ20gDQo+IGltYWdpbmluZyB0aGF0IHRoZSBhcHBsaWNhdGlv biBjb2RlIHdvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoNCj4gDQo+IGNvbm4gPSBQUWNv bm5lY3RTdGFydFBhcmFtcyguLi4pOw0KPiBmb3IgKDs7KQ0KPiB7DQo+ICAgICAgc3RhdHVzID0g UFFjb25uZWN0UG9sbChjb25uKQ0KPiAgICAgIHN3aXRjaCAoc3RhdHVzKQ0KPiAgICAgIHsNCj4g ICAgICAgICAgY2FzZSBDT05ORUNUSU9OX1NBU0xfVE9LRU5fUkVRVUlSRUQ6DQo+ICAgICAgICAg ICAgICAvKiBvcGVuIGEgYnJvd3NlciBmb3IgdGhlIHVzZXIsIGdldCB0b2tlbiAqLw0KPiAgICAg ICAgICAgICAgdG9rZW4gPSBvcGVuX2Jyb3dzZXIoKQ0KPiAgICAgICAgICAgICAgUFFhdXRoUmVz cG9uc2UodG9rZW4pOw0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgIC4uLg0KPiAg ICAgIH0NCj4gfQ0KDQpJIHdhcyB0b3lpbmcgd2l0aCB0aGUgaWRlYSBvZiBoYXZpbmcgYSBjYWxs YmFjayBmb3IgbGlicHEgY2xpZW50cywNCndoZXJlIHRoZXkgY291bGQgdGFrZSBmdWxsIGNvbnRy b2wgb2YgdGhlIE9BdXRoIGZsb3cgaWYgdGhleSB3YW50ZWQgdG8uDQpEb2luZyBpdCBpbmxpbmUg d2l0aCBQUWNvbm5lY3RQb2xsIHNlZW1zIGxpa2UgaXQgd291bGQgd29yayB0b28uIEl0IGhhcw0K YSBjb3VwbGUgb2YgZHJhd2JhY2tzIHRoYXQgSSBjYW4gc2VlOg0KDQotIElmIGEgY2xpZW50IGlz bid0IGN1cnJlbnRseSB1c2luZyBhIHBvbGwgbG9vcCwgdGhleSdkIGhhdmUgdG8gc3dpdGNoDQp0 byBvbmUgdG8gYmUgYWJsZSB0byB1c2UgT0F1dGggY29ubmVjdGlvbnMuIE5vdCBhIGRpZmZpY3Vs dCBjaGFuZ2UsIGJ1dA0KY29uc2lkZXJpbmcgYWxsIHRoZSBvdGhlciBodXJkbGVzIHRvIG1ha2lu ZyB0aGlzIHdvcmssIEknbSBob3BpbmcgdG8NCm1pbmltaXplIHRoZSBob29wLWp1bXBpbmcuDQoN Ci0gQSBjbGllbnQgd291bGQgc3RpbGwgaGF2ZSB0byByZWNlaXZlIGEgYnVuY2ggb2YgT0F1dGgg cGFyYW1ldGVycyBmcm9tDQpzb21lIG5ldyBsaWJwcSBBUEkgaW4gb3JkZXIgdG8gY29uc3RydWN0 IHRoZSBjb3JyZWN0IFVSTCB0byB2aXNpdCwgc28NCnRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9y IGltcGxlbWVudGVycyBtaWdodCBiZSBoaWdoZXIgdGhhbiBpZiB3ZSBqdXN0DQpwYXNzZWQgdGhv c2UgcGFyYW1zIGRpcmVjdGx5IGluIGEgY2FsbGJhY2suDQoNCj4gSXQgd291bGQgYmUgbmljZSB0 byBoYXZlIGEgc2ltcGxlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHRob3VnaCwgZm9yIA0KPiBw c3FsIGFuZCBhbGwgdGhlIG90aGVyIGNsaWVudCBhcHBsaWNhdGlvbnMgdGhhdCBjb21lIHdpdGgg UG9zdGdyZVNRTCBpdHNlbGYuDQoNCkkgYWdyZWUuIEkgdGhpbmsgaGF2aW5nIGEgYmFyZS1ib25l cyBpbXBsZW1lbnRhdGlvbiBpbiBsaWJwcSBpdHNlbGYNCndvdWxkIG1ha2UgaW5pdGlhbCBhZG9w dGlvbiAqbXVjaCogZWFzaWVyLCBhbmQgdGhlbiBpZiBzcGVjaWZpYw0KYXBwbGljYXRpb25zIHdh bnRlZCB0byBoYXZlIHJpY2hlciBjb250cm9sIG92ZXIgYW4gYXV0aG9yaXphdGlvbiBmbG93LA0K dGhlbiB0aGV5IGNvdWxkIGltcGxlbWVudCB0aGF0IHRoZW1zZWx2ZXMgd2l0aCB0aGUgYWZvcmVt ZW50aW9uZWQNCmNhbGxiYWNrLg0KDQpUaGUgRGV2aWNlIEF1dGhvcml6YXRpb24gZmxvdyB3YXMg dGhlIG1vc3QgbWluaW1hbCB3b3JraW5nDQppbXBsZW1lbnRhdGlvbiBJIGNvdWxkIGZpbmQsIHNp bmNlIGl0IGRvZXNuJ3QgcmVxdWlyZSBhIHdlYiBicm93c2VyIG9uDQp0aGUgc3lzdGVtLCBqdXN0 IHRoZSBhYmlsaXR5IHRvIHByaW50IGEgcHJvbXB0IHRvIHRoZSBjb25zb2xlLiBCdXQgaWYNCmFu eW9uZSBrbm93cyBvZiBhIGJldHRlciBmbG93IGZvciB0aGlzIHVzZSBjYXNlLCBJJ20gYWxsIGVh cnMuDQoNCj4gPiBJZiB5b3UndmUgcmVhZCB0aGlzIGZhciwgdGhhbmsgeW91IGZvciB5b3VyIGlu dGVyZXN0LCBhbmQgSSBob3BlIHlvdQ0KPiA+IGVuam95IHBsYXlpbmcgd2l0aCBpdCENCj4gDQo+ IEEgZmV3IHNtYWxsIHRoaW5ncyBjYXVnaHQgbXkgZXllIGluIHRoZSBiYWNrZW5kIG9hdXRoX2V4 Y2hhbmdlIGZ1bmN0aW9uOg0KPiANCj4gPiArICAgICAgIC8qIEhhbmRsZSB0aGUgY2xpZW50J3Mg aW5pdGlhbCBtZXNzYWdlLiAqLw0KPiA+ICsgICAgICAgcCA9IHN0cmR1cChpbnB1dCk7DQo+IA0K PiB0aGlzIHN0cmR1cCgpIHNob3VsZCBiZSBwc3RyZHVwKCkuDQoNClRoYW5rcywgSSdsbCBmaXgg dGhhdCBpbiB0aGUgbmV4dCByZS1yb2xsLg0KDQo+IEluIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGVy ZSBhcmUgYSBidW5jaCBvZiByZXBvcnRzIGxpa2UgdGhpczoNCj4gDQo+ID4gICAgICAgICAgICAg ICAgICAgIGVyZXBvcnQoRVJST1IsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGVy cmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICBlcnJtc2coIm1hbGZvcm1lZCBPQVVUSEJFQVJFUiBtZXNzYWdlIiksDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmRldGFpbCgiQ29tbWEgZXhwZWN0ZWQsIGJ1 dCBmb3VuZCBjaGFyYWN0ZXIgXCIlc1wiLiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzYW5pdGl6ZV9jaGFyKCpwKSkpKTsNCj4gDQo+IEkgZG9uJ3QgdGhpbmsg dGhlIGRvdWJsZSBxdW90ZXMgYXJlIG5lZWRlZCBoZXJlLCBiZWNhdXNlIHNhbml0aXplX2NoYXIg DQo+IHdpbGwgcmV0dXJuIHF1b3RlcyBpZiBpdCdzIGEgc2luZ2xlIGNoYXJhY3Rlci4gU28gaXQg d291bGQgZW5kIHVwIA0KPiBsb29raW5nIGxpa2UgdGhpczogLi4uIGZvdW5kIGNoYXJhY3RlciAi J3gnIi4NCg0KSSdsbCBmaXggdGhpcyB0b28uIFRoYW5rcyENCg0KLS1KYWNvYg0K