Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rhOaZ-00BFRb-Gj for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Mar 2024 06:47:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rhOaX-00E4sS-QR for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Mar 2024 06:47:46 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rhOaX-00E4sK-8P for pgsql-hackers@lists.postgresql.org; Tue, 05 Mar 2024 06:47:45 +0000 Received: from mail-yb1-xb2a.google.com ([2607:f8b0:4864:20::b2a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rhOaS-002qbZ-PI for pgsql-hackers@postgresql.org; Tue, 05 Mar 2024 06:47:45 +0000 Received: by mail-yb1-xb2a.google.com with SMTP id 3f1490d57ef6-dcbc6a6808fso5339652276.2 for ; Mon, 04 Mar 2024 22:47:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709621259; x=1710226059; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=YUbhJsW202cpf4z20y6xLCUPHfP2yr+HLqeeLVSvT90=; b=lQs/yCY/IuHqfbLkG/pvYpLIFSHBx+2QcIcmGnXQzQlDATcxE9PBR0XEZT1jAaSlIE QBd26KmA2io5gcQyFXsHfVvIGGsKlW8wZMBmSnG4TFBBDQvU24V0uwSABkZ+vktXc5P4 u6/3WkhprlxLlCqeiA/MJM8QH9Ea07F5YKvJvp/5ZPLnq8a1DYDSBhLpkQaqaFYkQwhX Y/A4yHo//p5qjIlOjmIK0T7FDe1FwcAJ6OuGFdYXbWdq+8MlSYOXLlLY5YGH7LXiZ7hp hMLmProl9fUgkkzWLGPri1k6ZtV7C53+l2Lq4r/SjQgpwtFhnm3i7pkDZJ0KftVz141b cYFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709621259; x=1710226059; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YUbhJsW202cpf4z20y6xLCUPHfP2yr+HLqeeLVSvT90=; b=uQXem2CxLIi+LTn33ApUvApn1/6PkyrDthsYf1iG77JSJgnUTasta0K5kB/cDLINqV fpghvHXQXgNlInEv+kfX7vgviXg4hNw6l/aOdpDxdPR6tjML+HjBjyxKHEns3oGPQvsA ZNTcyLsYQFmr/bYLldLuss6O6+wKcHS83cBolAhGKGU2a+MsPH0ebbeSEtX9ro26r8wY ZltiexfOpcCG8Dmlk8dmKfhOf63Abc7KIXFoc1VgGR0/+tmyj6HF36Mmo9kNZwe0oJ/G 3f6BRfAavdrc5mCbu/rHlaoumvT4zFi8SvNdoAV0omKl8RDN9MY8rYXWK9boSOZBBZxK FxZA== X-Gm-Message-State: AOJu0Yzj2FBH9734FjDonugyOwjFN5lwtt4FkgLqOie2OHNHE5tK0kxD A5Ous+9meC3WUYlVsz2Itr96JY1Q4pzFVNkRsi2Vz4LhhyXT19VK7RhqejfBoyqtN6rIsYvr/by MyZcULJpVj7rRP91AS8Oob1/lgRk= X-Google-Smtp-Source: AGHT+IF/bp7jUmtqlWS71vQ8xECmzzeN8orsbJjFSE+JwZ4hXNBcstoW7NB5eqB6sgAW1wGvr7U9IAkIBHEqmESgXcc= X-Received: by 2002:a25:9f8f:0:b0:dbd:8f9:a71 with SMTP id u15-20020a259f8f000000b00dbd08f90a71mr7993534ybq.28.1709621259364; Mon, 04 Mar 2024 22:47:39 -0800 (PST) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: <87il22cj51.fsf@163.com> From: Richard Guo Date: Tue, 5 Mar 2024 14:47:27 +0800 Message-ID: Subject: Re: Eager aggregation, take 3 To: Andy Fan Cc: PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000dda6300612e43798" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dda6300612e43798 Content-Type: multipart/alternative; boundary="000000000000dda62e0612e43796" --000000000000dda62e0612e43796 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 4, 2024 at 7:49=E2=80=AFPM Andy Fan wro= te: > This is a really helpful and not easy task, even I am not sure when I > can spend time to study this, I want to say "Thanks for working on > this!" first and hope we can really progress on this topic. Good luck! Thanks. I hope this take can go even further and ultimately find its way to be committed. This needs a rebase after dbbca2cf29. I also revised the commit message for 0007 and fixed a typo in 0009. Thanks Richard --000000000000dda62e0612e43796 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable --000000000000dda62e0612e43796-- --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0001-Introduce-RelInfoList-structure.patch" Content-Disposition: attachment; filename="v2-0001-Introduce-RelInfoList-structure.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3oc0 RnJvbSA3YWQ4YmQzMDRjZGY1YzJjMWVmNmI2YzQ0ZDBhZDc4MGUxODI2MTM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxOSBGZWIgMjAyNCAxNToxNjo1MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg MS85XSBJbnRyb2R1Y2UgUmVsSW5mb0xpc3Qgc3RydWN0dXJlCgpUaGlzIGNvbW1pdCBpbnRyb2R1 Y2VzIHRoZSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmUsIHdoaWNoIGVuY2Fwc3VsYXRlcwpib3RoIGEg bGlzdCBhbmQgYSBoYXNoIHRhYmxlLCBzbyB0aGF0IHdlIGNhbiBsZXZlcmFnZSB0aGUgaGFzaCB0 YWJsZSBmb3IKZmFzdGVyIGxvb2t1cHMgbm90IG9ubHkgZm9yIGpvaW4gcmVsYXRpb25zIGJ1dCBh bHNvIGZvciB1cHBlciByZWxhdGlvbnMuCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZh bC5jIHwgIDIwICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgfCAg IDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgIHwgICA1ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICB8IDE2NCArKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICB8ICAz MSArKystLQogNiBmaWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCAxNDJkY2ZjOTk1Li5mNDZm YzYwNGI0IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjA2OSw3ICs2MDY5 LDggQEAgZm9yZWlnbl9qb2luX29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lu cmVsLCBKb2luVHlwZSBqb2ludHlwZSwKIAkgKi8KIAlBc3NlcnQoZnBpbmZvLT5yZWxhdGlvbl9p bmRleCA9PSAwKTsJLyogc2hvdWxkbid0IGJlIHNldCB5ZXQgKi8KIAlmcGluZm8tPnJlbGF0aW9u X2luZGV4ID0KLQkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkgKyBsaXN0X2xlbmd0 aChyb290LT5qb2luX3JlbF9saXN0KTsKKwkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJs ZSkgKworCQlsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyk7CiAKIAlyZXR1 cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9f ZXZhbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKaW5kZXggZDJm N2Y0ZTVmMy4uMTE0MTE1Njg5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dl cW8vZ2Vxb19ldmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFs LmMKQEAgLTg1LDE4ICs4NSwxOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUg KnRvdXIsIGludCBudW1fZ2VuZSkKIAkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0cyBvcmln aW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQogCSAqIGFkZGVkIGVudHJp ZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCiAJICoKLQkgKiBXZSBhbHNvIG11c3QgdGFrZSBj YXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBqb2luX3JlbF9oYXNoLCBpZiB0aGVyZQotCSAq IGlzIG9uZS4gIFdlIGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkgc2V0dGluZyB0aGUg bGluayB0byBOVUxMLgotCSAqIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJl bHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5IGFyZSwgYQotCSAqIG5ldyBoYXNoIHRhYmxlIHdpbGwg Z2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUg bm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2xpc3QtPmhhc2gsIGlmCisJICogdGhl cmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRo ZSBsaW5rIHRvCisJICogTlVMTC4gIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2lu IHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5CisJICogYXJlLCBhIG5ldyBoYXNoIHRhYmxlIHdp bGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxb XSBzaG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlz YXZlbGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7Ci0Jc2F2ZWhhc2gg PSByb290LT5qb2luX3JlbF9oYXNoOworCXNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyb290LT5q b2luX3JlbF9saXN0LT5pdGVtcyk7CisJc2F2ZWhhc2ggPSByb290LT5qb2luX3JlbF9saXN0LT5o YXNoOwogCUFzc2VydChyb290LT5qb2luX3JlbF9sZXZlbCA9PSBOVUxMKTsKIAotCXJvb3QtPmpv aW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOwog CiAJLyogY29uc3RydWN0IHRoZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBjb21iaW5hdGlvbiBv ZiByZWxhdGlvbnMgKi8KIAlqb2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0b3VyLCBudW1fZ2Vu ZSk7CkBAIC0xMjEsOSArMTIxLDkgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5l ICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBm b3JtZXIgc3RhdGUsIGFuZCBwdXQgYmFjayBvcmlnaW5hbAogCSAqIGhhc2h0YWJsZSBpZiBhbnku CiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9y ZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9oYXNoID0g c2F2ZWhhc2g7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBsaXN0X3RydW5jYXRlKHJv b3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zLAorCQkJCQkJCQkJCQkgICBzYXZlbGVuZ3RoKTsKKwly b290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CiAKIAkvKiByZWxlYXNlIGFsbCB0 aGUgbWVtb3J5IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCAw Yjk4ZjA4NTZlLi5mOGE1ZmJjYjBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKQEAgLTM0MTAsOSArMzQxMCwxMCBAQCBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKICAqIG5lZWRlZCBmb3IgdGhlc2UgcGF0aHMgbmVl ZCBoYXZlIGJlZW4gaW5zdGFudGlhdGVkLgogICoKICAqIE5vdGUgdG8gcGx1Z2luIGF1dGhvcnM6 IHRoZSBmdW5jdGlvbnMgaW52b2tlZCBkdXJpbmcgc3RhbmRhcmRfam9pbl9zZWFyY2goKQotICog bW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QgYW5kIHJvb3QtPmpvaW5fcmVsX2hhc2guICBJZiB5 b3Ugd2FudCB0byBkbyBtb3JlCi0gKiB0aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xs IHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKLSAqIG9yaWdpbmFsIHN0YXRl cyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yIGFuIGV4YW1w bGUuCisgKiBtb2RpZnkgcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgYW5kIHJvb3QtPmpvaW5f cmVsX2xpc3QtPmhhc2guICBJZiB5b3UKKyAqIHdhbnQgdG8gZG8gbW9yZSB0aGFuIG9uZSBqb2lu LW9yZGVyIHNlYXJjaCwgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQKKyAqIHJlc3Rv cmUgdGhlIG9yaWdpbmFsIHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vx b19ldmFsKCkgZm9yCisgKiBhbiBleGFtcGxlLgogICovCiBSZWxPcHRJbmZvICoKIHN0YW5kYXJk X2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAq aW5pdGlhbF9yZWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggMDc1 ZDM2YzdlYy4uZWI3OGUzNzMxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j CkBAIC02NCw4ICs2NCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJICog Tk9URTogYXBwZW5kX3JlbF9saXN0IHdhcyBzZXQgdXAgYnkgc3VicXVlcnlfcGxhbm5lciwgc28g ZG8gbm90IHRvdWNoCiAJICogaGVyZS4KIAkgKi8KLQlyb290LT5qb2luX3JlbF9saXN0ID0gTklM OwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBt YWtlTm9kZShSZWxJbmZvTGlzdCk7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBOSUw7 CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAJcm9vdC0+am9pbl9yZWxfbGV2 ZWwgPSBOVUxMOwogCXJvb3QtPmpvaW5fY3VyX2xldmVsID0gMDsKIAlyb290LT5jYW5vbl9wYXRo a2V5cyA9IE5JTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBlNWY0MDYy YmZiLi45ZTI1NzUwYWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0z NSwxMSArMzUsMTUgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCi10eXBlZGVm IHN0cnVjdCBKb2luSGFzaEVudHJ5CisvKgorICogQW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRo YXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBSZWxPcHRJbmZvCisgKiBzdHJ1Y3R1cmVzIG1v cmUgZWZmaWNpZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKLQlSZWxp ZHMJCWpvaW5fcmVsaWRzOwkvKiBoYXNoIGtleSAtLS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9w dEluZm8gKmpvaW5fcmVsOwotfSBKb2luSGFzaEVudHJ5OworCVJlbGlkcwkJcmVsaWRzOwkJCS8q IGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCisJUmVsT3B0SW5mbyAqcmVsOworfSBSZWxJ bmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8gKmlucHV0X3Jl bCwKQEAgLTQ3MiwxMSArNDc2LDExIEBAIGZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCkKIH0KIAogLyoKLSAqIGJ1aWxkX2pvaW5fcmVsX2hhc2gK LSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0YWJsZSBmb3Igam9pbiByZWxhdGlv bnMuCisgKiBidWlsZF9yZWxfaGFzaAorICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNo IHRhYmxlIGZvciByZWxhdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkCi1idWlsZF9qb2luX3JlbF9o YXNoKFBsYW5uZXJJbmZvICpyb290KQorYnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3Qp CiB7CiAJSFRBQgkgICAqaGFzaHRhYjsKIAlIQVNIQ1RMCQloYXNoX2N0bDsKQEAgLTQ4NCw0NyAr NDg4LDQ5IEBAIGJ1aWxkX2pvaW5fcmVsX2hhc2goUGxhbm5lckluZm8gKnJvb3QpCiAKIAkvKiBD cmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKFJlbGlk cyk7Ci0JaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKEpvaW5IYXNoRW50cnkpOworCWhhc2hf Y3RsLmVudHJ5c2l6ZSA9IHNpemVvZihSZWxJbmZvRW50cnkpOwogCWhhc2hfY3RsLmhhc2ggPSBi aXRtYXBfaGFzaDsKIAloYXNoX2N0bC5tYXRjaCA9IGJpdG1hcF9tYXRjaDsKIAloYXNoX2N0bC5o Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7Ci0JaGFzaHRhYiA9IGhhc2hfY3JlYXRlKCJKb2lu UmVsSGFzaFRhYmxlIiwKKwloYXNodGFiID0gaGFzaF9jcmVhdGUoIlJlbEhhc2hUYWJsZSIsCiAJ CQkJCQkgIDI1NkwsCiAJCQkJCQkgICZoYXNoX2N0bCwKIAkJCQkJCSAgSEFTSF9FTEVNIHwgSEFT SF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8IEhBU0hfQ09OVEVYVCk7CiAKLQkvKiBJbnNlcnQg YWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGpvaW5yZWxzICovCi0JZm9yZWFjaChsLCByb290LT5q b2luX3JlbF9saXN0KQorCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRp b25zICovCisJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAl7CiAJCVJlbE9wdEluZm8gKnJlbCA9 IChSZWxPcHRJbmZvICopIGxmaXJzdChsKTsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlS ZWxJbmZvRW50cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKLQkJaGVudHJ5ID0gKEpvaW5I YXNoRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKLQkJCQkJCQkJCQkJICAgJihyZWwtPnJl bGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3VuZCk7 CisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKKwkJCQkJ CQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJICBIQVNIX0VOVEVSLAorCQkJCQkJ CQkJCQkgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0g cmVsOworCQloZW50cnktPnJlbCA9IHJlbDsKIAl9CiAKLQlyb290LT5qb2luX3JlbF9oYXNoID0g aGFzaHRhYjsKKwlsaXN0LT5oYXNoID0gaGFzaHRhYjsKIH0KIAogLyoKLSAqIGZpbmRfam9pbl9y ZWwKLSAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMn IChhIHNldCBvZiBSVCBpbmRleGVzKSwKLSAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRo aXMgaXMgZm9yIGpvaW4gcmVsYXRpb25zLgorICogZmluZF9yZWxfaW5mbworICoJICBGaW5kIGFu IFJlbE9wdEluZm8gZW50cnkuCiAgKi8KLVJlbE9wdEluZm8gKgotZmluZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3N0YXRpYyBSZWxPcHRJbmZvICoKK2ZpbmRf cmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiB7CisJaWYgKGxpc3Qg PT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIFN3aXRjaCB0byB1c2luZyBoYXNo IGxvb2t1cCB3aGVuIGxpc3QgZ3Jvd3MgInRvbyBsb25nIi4gIFRoZSB0aHJlc2hvbGQKIAkgKiBp cyBhcmJpdHJhcnkgYW5kIGlzIGtub3duIG9ubHkgaGVyZS4KIAkgKi8KLQlpZiAoIXJvb3QtPmpv aW5fcmVsX2hhc2ggJiYgbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCkgPiAzMikKLQkJ YnVpbGRfam9pbl9yZWxfaGFzaChyb290KTsKKwlpZiAoIWxpc3QtPmhhc2ggJiYgbGlzdF9sZW5n dGgobGlzdC0+aXRlbXMpID4gMzIpCisJCWJ1aWxkX3JlbF9oYXNoKGxpc3QpOwogCiAJLyoKIAkg KiBVc2UgZWl0aGVyIGhhc2h0YWJsZSBsb29rdXAgb3IgbGluZWFyIHNlYXJjaCwgYXMgYXBwcm9w cmlhdGUuCkBAIC01MzQsMjMgKzU0MCwyMyBAQCBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxpZHMgcmVsaWRzKQogCSAqIHNvIHdvdWxkIGZvcmNlIHJlbGlkcyBvdXQgb2YgYSBy ZWdpc3RlciBhbmQgdGh1cyBwcm9iYWJseSBzbG93IGRvd24gdGhlCiAJICogbGlzdC1zZWFyY2gg Y2FzZS4KIAkgKi8KLQlpZiAocm9vdC0+am9pbl9yZWxfaGFzaCkKKwlpZiAobGlzdC0+aGFzaCkK IAl7CiAJCVJlbGlkcwkJaGFzaGtleSA9IHJlbGlkczsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5 OworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAq KSBoYXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmaGFzaGtl eSwKLQkJCQkJCQkJCQkJICAgSEFTSF9GSU5ELAotCQkJCQkJCQkJCQkgICBOVUxMKTsKKwkJaGVu dHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJ CQkgICZoYXNoa2V5LAorCQkJCQkJCQkJCQkgIEhBU0hfRklORCwKKwkJCQkJCQkJCQkJICBOVUxM KTsKIAkJaWYgKGhlbnRyeSkKLQkJCXJldHVybiBoZW50cnktPmpvaW5fcmVsOworCQkJcmV0dXJu IGhlbnRyeS0+cmVsOwogCX0KIAllbHNlCiAJewogCQlMaXN0Q2VsbCAgICpsOwogCi0JCWZvcmVh Y2gobCwgcm9vdC0+am9pbl9yZWxfbGlzdCkKKwkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJ ewogCQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwogCkBAIC01 NjIsNiArNTY4LDU0IEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyBy ZWxpZHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBmaW5kX2pvaW5fcmVsCisgKgkgIFJl dHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2Yg UlQgaW5kZXhlcyksCisgKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBq b2luIHJlbGF0aW9ucy4KKyAqLworUmVsT3B0SW5mbyAqCitmaW5kX2pvaW5fcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3Qt PmpvaW5fcmVsX2xpc3QsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBhZGRfcmVsX2luZm8KKyAqCQlB ZGQgZ2l2ZW4gcmVsYXRpb24gdG8gdGhlIGdpdmVuIGxpc3QuIEFsc28gYWRkIGl0IHRvIHRoZSBh dXhpbGlhcnkKKyAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgdm9p ZAorYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJbmZvICpyZWwpCit7CisJ LyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0aGUgZW5k IG9mIHRoZSBsaXN0ISAqLworCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgcmVs KTsKKworCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLiAqLworCWlmIChsaXN0LT5oYXNoKQorCXsKKwkJUmVsSW5mb0VudHJ5ICpoZW50cnk7 CisJCWJvb2wJCWZvdW5kOworCisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFy Y2gobGlzdC0+aGFzaCwKKwkJCQkJCQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJ ICBIQVNIX0VOVEVSLAorCQkJCQkJCQkJCQkgICZmb3VuZCk7CisJCUFzc2VydCghZm91bmQpOwor CQloZW50cnktPnJlbCA9IHJlbDsKKwl9Cit9CisKKy8qCisgKiBhZGRfam9pbl9yZWwKKyAqCQlB ZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0 aGUgZ2l2ZW4KKyAqCQlQbGFubmVySW5mby4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9qb2luX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKK3sKKwlhZGRfcmVsX2lu Zm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWln bl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVy IGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9yZWlnbgpAQCAtNjExLDMyICs2NjUsNiBAQCBzZXRf Zm9yZWlnbl9yZWxfcHJvcGVydGllcyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCiAJfQogfQogCi0vKgotICogYWRkX2pvaW5fcmVsCi0gKgkJQWRkIGdpdmVuIGpv aW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCi0g KgkJUGxhbm5lckluZm8uIEFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlm IHRoZXJlIGlzIG9uZS4KLSAqLwotc3RhdGljIHZvaWQKLWFkZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKLXsKLQkvKiBHRVFPIHJlcXVpcmVzIHVzIHRv IGFwcGVuZCB0aGUgbmV3IGpvaW5yZWwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KLQlyb290 LT5qb2luX3JlbF9saXN0ID0gbGFwcGVuZChyb290LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsK LQotCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMg b25lLiAqLwotCWlmIChyb290LT5qb2luX3JlbF9oYXNoKQotCXsKLQkJSm9pbkhhc2hFbnRyeSAq aGVudHJ5OwotCQlib29sCQlmb3VuZDsKLQotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBo YXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmKGpvaW5yZWwt PnJlbGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3Vu ZCk7Ci0JCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0gam9pbnJlbDsKLQl9 Ci19Ci0KIC8qCiAgKiBidWlsZF9qb2luX3JlbAogICoJICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5 IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuaW9uIG9mIHR3byBnaXZlbiByZWxzLApAQCAtMTQ2Miwy MiArMTQ5MCwxNCBAQCBzdWJidWlsZF9qb2lucmVsX2pvaW5saXN0KFJlbE9wdEluZm8gKmpvaW5y ZWwsCiBSZWxPcHRJbmZvICoKIGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBw ZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIHsKKwlSZWxJbmZvTGlzdCAqbGlz dCA9ICZyb290LT51cHBlcl9yZWxzW2tpbmRdOwogCVJlbE9wdEluZm8gKnVwcGVycmVsOwotCUxp c3RDZWxsICAgKmxjOwotCi0JLyoKLQkgKiBGb3IgdGhlIG1vbWVudCwgb3VyIGluZGV4aW5nIGRh dGEgc3RydWN0dXJlIGlzIGp1c3QgYSBMaXN0IGZvciBlYWNoCi0JICogcmVsYXRpb24ga2luZC4g IElmIHdlIGV2ZXIgZ2V0IHNvIG1hbnkgb2Ygb25lIGtpbmQgdGhhdCB0aGlzIHN0b3BzCi0JICog d29ya2luZyB3ZWxsLCB3ZSBjYW4gaW1wcm92ZSBpdC4gIE5vIGNvZGUgb3V0c2lkZSB0aGlzIGZ1 bmN0aW9uIHNob3VsZAotCSAqIGFzc3VtZSBhbnl0aGluZyBhYm91dCBob3cgdG8gZmluZCBhIHBh cnRpY3VsYXIgdXBwZXJyZWwuCi0JICovCiAKIAkvKiBJZiB3ZSBhbHJlYWR5IG1hZGUgdGhpcyB1 cHBlcnJlbCBmb3IgdGhlIHF1ZXJ5LCByZXR1cm4gaXQgKi8KLQlmb3JlYWNoKGxjLCByb290LT51 cHBlcl9yZWxzW2tpbmRdKQorCWlmIChsaXN0KQogCXsKLQkJdXBwZXJyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGMpOwotCi0JCWlmIChibXNfZXF1YWwodXBwZXJyZWwtPnJlbGlkcywgcmVs aWRzKSkKKwkJdXBwZXJyZWwgPSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CisJCWlmICh1 cHBlcnJlbCkKIAkJCXJldHVybiB1cHBlcnJlbDsKIAl9CiAKQEAgLTE0OTYsNyArMTUxNiw3IEBA IGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2lu ZCwgUmVsaWRzIHJlbGlkcykKIAl1cHBlcnJlbC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxM OwogCXVwcGVycmVsLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOwogCi0Jcm9v dC0+dXBwZXJfcmVsc1traW5kXSA9IGxhcHBlbmQocm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBw ZXJyZWwpOworCWFkZF9yZWxfaW5mbygmcm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBwZXJyZWwp OwogCiAJcmV0dXJuIHVwcGVycmVsOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA1MzQ2OTJi ZWUxLi5iZTUxZTJjNjUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtODAsNiArODAsMjUgQEAg dHlwZWRlZiBlbnVtIFVwcGVyUmVsYXRpb25LaW5kCiAJLyogTkI6IFVQUEVSUkVMX0ZJTkFMIG11 c3QgYmUgbGFzdCBlbnVtIGVudHJ5OyBpdCdzIHVzZWQgdG8gc2l6ZSBhcnJheXMgKi8KIH0gVXBw ZXJSZWxhdGlvbktpbmQ7CiAKKy8qCisgKiBIYXNoZWQgbGlzdCB0byBzdG9yZSByZWxhdGlvbiBz cGVjaWZpYyBpbmZvIGFuZCB0byByZXRyaWV2ZSBpdCBieSByZWxpZHMuCisgKgorICogRm9yIHNt YWxsIHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUgbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hl biB0aGVyZSBhcmUKKyAqIG1hbnkgcmVsYXRpb25zIHdlIGJ1aWxkIGEgaGFzaCB0YWJsZSBmb3Ig ZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcworICogcHJlc2VudCBhbmQgdmFsaWQg d2hlbiAnaGFzaCcgaXMgbm90IE5VTEwuICBOb3RlIHRoYXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhl CisgKiBsaXN0IGV2ZW4gd2hlbiB1c2luZyB0aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhp cyBzaW1wbGlmaWVzIGxpZmUgZm9yCisgKiBHRVFPLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJ bmZvTGlzdAoreworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKQorCisJTm9k ZVRhZwkJdHlwZTsKKworCUxpc3QJICAgKml0ZW1zOworCXN0cnVjdCBIVEFCICpoYXNoIHBnX25v ZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Cit9IFJlbEluZm9MaXN0OworCiAvKi0tLS0tLS0t LS0KICAqIFBsYW5uZXJHbG9iYWwKICAqCQlHbG9iYWwgaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5n L29wdGltaXphdGlvbgpAQCAtMjY3LDE1ICsyODYsOSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAog CS8qCiAJICogam9pbl9yZWxfbGlzdCBpcyBhIGxpc3Qgb2YgYWxsIGpvaW4tcmVsYXRpb24gUmVs T3B0SW5mb3Mgd2UgaGF2ZQotCSAqIGNvbnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uICBG b3Igc21hbGwgcHJvYmxlbXMgd2UganVzdCBzY2FuIHRoZQotCSAqIGxpc3QgdG8gZG8gbG9va3Vw cywgYnV0IHdoZW4gdGhlcmUgYXJlIG1hbnkgam9pbiByZWxhdGlvbnMgd2UgYnVpbGQgYQotCSAq IGhhc2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMgcHJlc2Vu dCBhbmQgdmFsaWQKLQkgKiB3aGVuIGpvaW5fcmVsX2hhc2ggaXMgbm90IE5VTEwuICBOb3RlIHRo YXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIGxpc3QKLQkgKiBldmVuIHdoZW4gdXNpbmcgdGhlIGhh c2ggdGFibGUgZm9yIGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgotCSAqIEdFUU8u CisJICogY29uc2lkZXJlZCBpbiB0aGlzIHBsYW5uaW5nIHJ1bi4KIAkgKi8KLQlMaXN0CSAgICpq b2luX3JlbF9saXN0OwotCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QgKmpvaW5fcmVsX2xpc3Q7CS8qIGxpc3Qg b2Ygam9pbi1yZWxhdGlvbiBSZWxPcHRJbmZvcyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEg ZHluYW1pYy1wcm9ncmFtbWluZy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10K QEAgLTQwOCw3ICs0MjEsNyBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBVcHBlci1yZWwgUmVs T3B0SW5mb3MuIFVzZSBmZXRjaF91cHBlcl9yZWwoKSB0byBnZXQgYW55IHBhcnRpY3VsYXIKIAkg KiB1cHBlciByZWwuCiAJICovCi0JTGlzdAkgICAqdXBwZXJfcmVsc1tVUFBFUlJFTF9GSU5BTCAr IDFdIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QJCXVwcGVy X3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OzsKIAogCS8qIFJlc3VsdCB0bGlzdHMgY2hvc2VuIGJ5IGdyb3VwaW5nX3BsYW5uZXIgZm9yIHVw cGVyLXN0YWdlIHByb2Nlc3NpbmcgKi8KIAlzdHJ1Y3QgUGF0aFRhcmdldCAqdXBwZXJfdGFyZ2V0 c1tVUFBFUlJFTF9GSU5BTCArIDFdIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Ci0t IAoyLjMxLjAKCg== --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Disposition: attachment; filename="v2-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3ow3 RnJvbSA2YzJhZmUwNDE0ZjdjOGE4YjNkZjE4ZDI0MWYyOTEyOTY1ZmZkYTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMToyNzo0OSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg NC85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIFJlbEFnZ0luZm9zIGlmCiBhcHBs aWNhYmxlCgpUaGlzIGNvbW1pdCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdGhhdCBjaGVjayBp ZiBlYWdlciBhZ2dyZWdhdGlvbiBpcwphcHBsaWNhYmxlIGZvciBhIGdpdmVuIHJlbGF0aW9uLCBh bmQgaWYgc28sIGNyZWF0ZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZQpmb3IgdGhlIHJlbGF0aW9uLCB1 c2luZyB0aGUgaW5mb3MgYWJvdXQgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZApncm91cGluZyBl eHByZXNzaW9ucyB3ZSBjb2xsZWN0ZWQgZWFybGllci4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9lcXVpdmNsYXNzLmMgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5tYWluLmMgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMgICAgfCA2MjQgKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAg ICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgIHwg ICAzICstCiA3IGZpbGVzIGNoYW5nZWQsIDY2MiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggNGJkNjBhMDlj Ni4uMTg5MGRiYjg1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1 aXZjbGFzcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpA QCAtMjQzOSwxNSArMjQzOSwxNyBAQCBmaW5kX2pvaW5fZG9tYWluKFBsYW5uZXJJbmZvICpyb290 LCBSZWxpZHMgcmVsaWRzKQogICoJICBEZXRlY3Qgd2hldGhlciB0d28gZXhwcmVzc2lvbnMgYXJl IGtub3duIGVxdWFsIGR1ZSB0byBlcXVpdmFsZW5jZQogICoJICByZWxhdGlvbnNoaXBzLgogICoK LSAqIEFjdHVhbGx5LCB0aGlzIG9ubHkgc2hvd3MgdGhhdCB0aGUgZXhwcmVzc2lvbnMgYXJlIGVx dWFsIGFjY29yZGluZwotICogdG8gc29tZSBvcGZhbWlseSdzIG5vdGlvbiBvZiBlcXVhbGl0eSAt LS0gYnV0IHdlIG9ubHkgdXNlIGl0IGZvcgotICogc2VsZWN0aXZpdHkgZXN0aW1hdGlvbiwgc28g YSBmdXp6eSBpZGVhIG9mIGVxdWFsaXR5IGlzIE9LLgorICogSWYgb3BmYW1pbHkgaXMgZ2l2ZW4s IHRoZSBleHByZXNzaW9ucyBtdXN0IGJlIGtub3duIGVxdWFsIHBlciB0aGUgc2VtYW50aWNzCisg KiBvZiB0aGF0IG9wZmFtaWx5IChub3RlIGl0IGhhcyB0byBiZSBhIGJ0cmVlIG9wZmFtaWx5LCBz aW5jZSB0aG9zZSBhcmUgdGhlCisgKiBvbmx5IG9wZmFtaWxpZXMgZXF1aXZjbGFzcy5jIGRlYWxz IHdpdGgpLiAgSWYgb3BmYW1pbHkgaXMgSW52YWxpZE9pZCwgd2UnbGwKKyAqIHJldHVybiB0cnVl IGlmIHRoZXkncmUgZXF1YWwgYWNjb3JkaW5nIHRvIGFueSBvcGZhbWlseSwgd2hpY2ggaXMgZnV6 enkgYnV0CisgKiBPSyBmb3IgZXN0aW1hdGlvbiBwdXJwb3Nlcy4KICAqCiAgKiBOb3RlOiBkb2Vz IG5vdCBib3RoZXIgdG8gY2hlY2sgZm9yICJlcXVhbChpdGVtMSwgaXRlbTIpIjsgY2FsbGVyIG11 c3QKICAqIGNoZWNrIHRoYXQgY2FzZSBpZiBpdCdzIHBvc3NpYmxlIHRvIHBhc3MgaWRlbnRpY2Fs IGl0ZW1zLgogICovCiBib29sCi1leHByc19rbm93bl9lcXVhbChQbGFubmVySW5mbyAqcm9vdCwg Tm9kZSAqaXRlbTEsIE5vZGUgKml0ZW0yKQorZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwgT2lkIG9wZmFtaWx5KQogewogCUxpc3RD ZWxsICAgKmxjMTsKIApAQCAtMjQ2Miw2ICsyNDY0LDE3IEBAIGV4cHJzX2tub3duX2VxdWFsKFBs YW5uZXJJbmZvICpyb290LCBOb2RlICppdGVtMSwgTm9kZSAqaXRlbTIpCiAJCWlmIChlYy0+ZWNf aGFzX3ZvbGF0aWxlKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogSXQncyBva2F5IHRvIGNv bnNpZGVyIGVjX2Jyb2tlbiBFQ3MgaGVyZS4gIEJyb2tlbm5lc3MganVzdCBtZWFucyB3ZQorCQkg KiBjb3VsZG4ndCBkZXJpdmUgYWxsIHRoZSBpbXBsaWVkIGNsYXVzZXMgd2UnZCBoYXZlIGxpa2Vk IHRvOyBpdCBkb2VzCisJCSAqIG5vdCBpbnZhbGlkYXRlIG91ciBrbm93bGVkZ2UgdGhhdCB0aGUg bWVtYmVycyBhcmUgZXF1YWwuCisJCSAqLworCisJCS8qIElnbm9yZSBpZiB0aGlzIEVDIGRvZXNu J3QgdXNlIHNwZWNpZmllZCBvcGZhbWlseSAqLworCQlpZiAoT2lkSXNWYWxpZChvcGZhbWlseSkg JiYKKwkJCSFsaXN0X21lbWJlcl9vaWQoZWMtPmVjX29wZmFtaWxpZXMsIG9wZmFtaWx5KSkKKwkJ CWNvbnRpbnVlOworCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewogCQkJRXF1 aXZhbGVuY2VNZW1iZXIgKmVtID0gKEVxdWl2YWxlbmNlTWVtYmVyICopIGxmaXJzdChsYzIpOwpA QCAtMjQ5MCw4ICsyNTAzLDcgQEAgZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8gKnJvb3Qs IE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMikKICAqIChJbiBwcmluY2lwbGUgdGhlcmUgbWlnaHQg YmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBlY2xhc3MgaWYgbXVsdGlwbGUKICAqIGNvbGxhdGlv bnMgYXJlIGludm9sdmVkLCBidXQgc2luY2UgY29sbGF0aW9uIGRvZXNuJ3QgbWF0dGVyIGZvciBl cXVhbGl0eSwKICAqIHdlIGlnbm9yZSB0aGF0IGZpbmUgcG9pbnQgaGVyZS4pICBUaGlzIGlzIG11 Y2ggbGlrZSBleHByc19rbm93bl9lcXVhbCwKLSAqIGV4Y2VwdCB0aGF0IHdlIGluc2lzdCBvbiB0 aGUgY29tcGFyaXNvbiBvcGVyYXRvciBtYXRjaGluZyB0aGUgZWNsYXNzLCBzbwotICogdGhhdCB0 aGUgcmVzdWx0IGlzIGRlZmluaXRlIG5vdCBhcHByb3hpbWF0ZS4KKyAqIGV4Y2VwdCBmb3IgdGhl IGZvcm1hdCBvZiB0aGUgaW5wdXQuCiAgKgogICogT24gc3VjY2Vzcywgd2UgYWxzbyBzZXQgZmtp bmZvLT5lY2xhc3NbY29sbm9dIHRvIHRoZSBtYXRjaGluZyBlY2xhc3MsCiAgKiBhbmQgc2V0IGZr aW5mby0+ZmtfZWNsYXNzX21lbWJlcltjb2xub10gdG8gdGhlIGVjbGFzcyBtZW1iZXIgZm9yIHRo ZQpAQCAtMjUzMiw3ICsyNTQ0LDcgQEAgbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9rZXlfY29s KFBsYW5uZXJJbmZvICpyb290LAogCQkvKiBOZXZlciBtYXRjaCB0byBhIHZvbGF0aWxlIEVDICov CiAJCWlmIChlYy0+ZWNfaGFzX3ZvbGF0aWxlKQogCQkJY29udGludWU7Ci0JCS8qIE5vdGU6IGl0 IHNlZW1zIG9rYXkgdG8gbWF0Y2ggdG8gImJyb2tlbiIgZWNsYXNzZXMgaGVyZSAqLworCQkvKiBJ dCdzIG9rYXkgdG8gY29uc2lkZXIgImJyb2tlbiIgRUNzIGhlcmUsIHNlZSBleHByc19rbm93bl9l cXVhbCAqLwogCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggMTk3YTNmOTA1ZS4uMGZmMGNhOTljYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC02Nyw2ICs2Nyw5IEBAIHF1ZXJ5 X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VO b2RlKFJlbEluZm9MaXN0KTsKIAlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKIAly b290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKKwlyb290LT5hZ2dfaW5mb19saXN0ID0g bWFrZU5vZGUoUmVsSW5mb0xpc3QpOworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zID0gTklM OworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xl dmVsID0gTlVMTDsKIAlyb290LT5qb2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0 aGtleXMgPSBOSUw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggYzg4ZGE5 NjNkYi4uZTdmNDY1ZWY3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAt ODcsNiArODcsMTQgQEAgc3RhdGljIHZvaWQgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpjaGlsZHJlbCwKIAkJCQkJ CQkJCSAgIGludCBuYXBwaW5mb3MsCiAJCQkJCQkJCQkgICBBcHBlbmRSZWxJbmZvICoqYXBwaW5m b3MpOworc3RhdGljIGJvb2wgZWFnZXJfYWdncmVnYXRpb25fcG9zc2libGVfZm9yX3JlbGF0aW9u KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0 aWMgYm9vbCBpbml0X2dyb3VwaW5nX3RhcmdldHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKKwkJCQkJCQkJICBQYXRoVGFyZ2V0ICp0YXJnZXQsIFBhdGhUYXJnZXQgKmFnZ19p bnB1dCwKKwkJCQkJCQkJICBMaXN0ICoqZ3JvdXBfZXhwcnNfZXh0cmFfcCk7CitzdGF0aWMgYm9v bCBpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyKTsKK3N0 YXRpYyBib29sIGlzX3Zhcl9uZWVkZWRfYnlfam9pbihQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2 YXIsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgSW5kZXggZ2V0X2V4cHJlc3Npb25fc29ydGdy b3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKTsKIAogCiAvKgpAQCAtNjQwLDYg KzY0OCw1OCBAQCBhZGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwpCiAJYWRkX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOwogfQog CisvKgorICogYWRkX2dyb3VwZWRfcmVsCisgKgkJQWRkIGdyb3VwZWQgYmFzZSBvciBqb2luIHJl bGF0aW9uIHRvIHRoZSBsaXN0IG9mIGdyb3VwZWQgcmVsYXRpb25zIGluCisgKgkJdGhlIGdpdmVu IFBsYW5uZXJJbmZvLiAgQWxzbyBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgUmVsQWdnSW5mbyB0bwor ICoJCXJvb3QtPmFnZ19pbmZvX2xpc3QuCisgKi8KK3ZvaWQKK2FkZF9ncm91cGVkX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSZWxBZ2dJbmZvICphZ2dfaW5mbykKK3sK KwlhZGRfcmVsX2luZm8oJnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9B R0ddLCByZWwpOworCWFkZF9yZWxfaW5mbyhyb290LT5hZ2dfaW5mb19saXN0LCBhZ2dfaW5mbyk7 Cit9CisKKy8qCisgKiBmaW5kX2dyb3VwZWRfcmVsCisgKgkgIFJldHVybnMgZ3JvdXBlZCByZWxh dGlvbiBlbnRyeSAoYmFzZSBvciBqb2luIHJlbGF0aW9uKSBjb3JyZXNwb25kaW5nIHRvCisgKgkg ICdyZWxpZHMnIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuCisgKgorICogSWYgYWdnX2luZm9fcCBp cyBub3QgTlVMTCwgdGhlbiBhbHNvIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8gKGlmIG9u ZQorICogZXhpc3RzKSB3aWxsIGJlIHJldHVybmVkIGluICphZ2dfaW5mb19wLgorICovCitSZWxP cHRJbmZvICoKK2ZpbmRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxp ZHMsIFJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKQoreworCVJlbE9wdEluZm8gKnJlbDsKKworCXJl bCA9IChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2luZm8oJnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJS RUxfUEFSVElBTF9HUk9VUF9BR0ddLAorCQkJCQkJCQkJICAgcmVsaWRzKTsKKwlpZiAocmVsID09 IE5VTEwpCisJeworCQlpZiAoYWdnX2luZm9fcCkKKwkJCSphZ2dfaW5mb19wID0gTlVMTDsKKwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBhbHNvIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBS ZWxBZ2dJbmZvLCBpZiBhc2tlZCAqLworCWlmIChhZ2dfaW5mb19wKQorCXsKKwkJUmVsQWdnSW5m byAqYWdnX2luZm87CisKKwkJYWdnX2luZm8gPSAoUmVsQWdnSW5mbyAqKSBmaW5kX3JlbF9pbmZv KHJvb3QtPmFnZ19pbmZvX2xpc3QsIHJlbGlkcyk7CisKKwkJLyogVGhlIHJlbGF0aW9uIGV4aXN0 cywgc28gdGhlIGFnZ19pbmZvIHNob3VsZCBiZSB0aGVyZSB0b28uICovCisJCUFzc2VydChhZ2df aW5mbyAhPSBOVUxMKTsKKworCQkqYWdnX2luZm9fcCA9IGFnZ19pbmZvOworCX0KKworCXJldHVy biByZWw7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWlnbl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1 cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9y ZWlnbgpAQCAtMjQ2NCwzICsyNTI0LDU2NyBAQCBidWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQ bGFubmVySW5mbyAqcm9vdCwKIAljaGlsZHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZSA9 IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZTsKIAljaGlsZHJlbC0+cmVsdGFy Z2V0LT53aWR0aCA9IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT53aWR0aDsKIH0KKworLyoKKyAqIGNy ZWF0ZV9yZWxfYWdnX2luZm8KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVuIHJlbGF0aW9uIGNhbiBw cm9kdWNlIGdyb3VwZWQgcGF0aHMgYW5kIHJldHVybiB0aGUKKyAqCSAgaW5mb3JtYXRpb24gaXQn bGwgbmVlZCBmb3IgaXQuICBUaGUgZ2l2ZW4gcmVsYXRpb24gaXMgdGhlIG5vbi1ncm91cGVkIG9u ZQorICoJICB3aGljaCBoYXMgdGhlIHJlbHRhcmdldCBhbHJlYWR5IGNvbnN0cnVjdGVkLgorICov CitSZWxBZ2dJbmZvICoKK2NyZWF0ZV9yZWxfYWdnX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlSZWxBZ2dJbmZvICpyZXN1bHQ7 CisJUGF0aFRhcmdldCAqYWdnX2lucHV0OworCVBhdGhUYXJnZXQgKnRhcmdldDsKKwlMaXN0CSAg ICpncnBfZXhwcnNfZXh0cmEgPSBOSUw7CisJTGlzdAkgICAqZ3JvdXBfY2xhdXNlc19maW5hbDsK KwlpbnQJCQlpOworCisJLyoKKwkgKiBUaGUgbGlzdHMgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25z IGFuZCBncm91cGluZyBleHByZXNzaW9ucyBzaG91bGQgaGF2ZQorCSAqIGJlZW4gY29uc3RydWN0 ZWQuCisJICovCisJQXNzZXJ0KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCAhPSBOSUwpOworCUFzc2Vy dChyb290LT5ncm91cF9leHByX2xpc3QgIT0gTklMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBh IGNoaWxkIHJlbCwgdGhlIGdyb3VwZWQgcmVsIGZvciBpdHMgcGFyZW50IHJlbCBtdXN0IGhhdmUK KwkgKiBiZWVuIGNyZWF0ZWQgaWYgaXQgY2FuLiAgU28gd2UgY2FuIGp1c3QgdXNlIHBhcmVudCdz IFJlbEFnZ0luZm8gaWYgdGhlcmUKKwkgKiBpcyBvbmUsIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFi bGUgc3Vic3RpdHV0aW9ucy4KKwkgKi8KKwlpZiAoSVNfT1RIRVJfUkVMKHJlbCkpCisJeworCQlS ZWxPcHRJbmZvCSAgICpyZWxfZ3JvdXBlZDsKKwkJUmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisJ CVJlbGlkcwkJCXBhcmVudF9yZWxpZHMgPSBOVUxMOworCQlBcHBlbmRSZWxJbmZvICoqYXBwaW5m b3M7CisJCWludAkJCQluYXBwaW5mb3M7CisJCWludAkJCQljbnQ7CisKKwkJYXBwaW5mb3MgPSBm aW5kX2FwcGluZm9zX2J5X3JlbGlkcyhyb290LCByZWwtPnJlbGlkcywgJm5hcHBpbmZvcyk7CisK KwkJZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQorCQkJcGFyZW50X3JlbGlk cyA9IGJtc19hZGRfbWVtYmVyKHBhcmVudF9yZWxpZHMsCisJCQkJCQkJCQkJICAgYXBwaW5mb3Nb Y250XS0+cGFyZW50X3JlbGlkKTsKKworCQlBc3NlcnQoIWJtc19pc19lbXB0eShwYXJlbnRfcmVs aWRzKSk7CisJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBwYXJlbnRfcmVs aWRzLCAmYWdnX2luZm8pOworCisJCWlmIChyZWxfZ3JvdXBlZCA9PSBOVUxMKQorCQkJcmV0dXJu IE5VTEw7CisKKwkJQXNzZXJ0KGFnZ19pbmZvICE9IE5VTEwpOworCisJCWFnZ19pbmZvID0gKFJl bEFnZ0luZm8gKikgYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LAorCQkJCQkJCQkJCQkJCQkg KE5vZGUgKikgYWdnX2luZm8sCisJCQkJCQkJCQkJCQkJCSBuYXBwaW5mb3MsCisJCQkJCQkJCQkJ CQkJCSBhcHBpbmZvcyk7CisKKwkJcGZyZWUoYXBwaW5mb3MpOworCisJCWFnZ19pbmZvLT5pbnB1 dF9yb3dzID0gcmVsLT5yb3dzOworCQlhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzID0KKwkJCWVzdGlt YXRlX251bV9ncm91cHMocm9vdCwgYWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQlhZ2df aW5mby0+aW5wdXRfcm93cywgTlVMTCwgTlVMTCk7CisKKwkJcmV0dXJuIGFnZ19pbmZvOworCX0K KworCS8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJvZHVjZSBncm91cGVkIHBhdGhzIGZv ciB0aGlzIHJlbGF0aW9uLiAqLworCWlmICghZWFnZXJfYWdncmVnYXRpb25fcG9zc2libGVfZm9y X3JlbGF0aW9uKHJvb3QsIHJlbCkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBDcmVhdGUg dGFyZ2V0cyBmb3IgdGhlIGdyb3VwZWQgcGF0aHMgYW5kIGZvciB0aGUgaW5wdXQgcGF0aHMgb2Yg dGhlCisJICogZ3JvdXBlZCBwYXRocy4KKwkgKi8KKwl0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0 aHRhcmdldCgpOworCWFnZ19pbnB1dCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CisKKwkv KiBpbml0aWFsaXplICd0YXJnZXQnIGFuZCAnYWdnX2lucHV0JyAqLworCWlmICghaW5pdF9ncm91 cGluZ190YXJnZXRzKHJvb3QsIHJlbCwgdGFyZ2V0LCBhZ2dfaW5wdXQsICZncnBfZXhwcnNfZXh0 cmEpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEVhZ2VyIGFnZ3JlZ2F0aW9uIG1ha2VzIG5vIHNl bnNlIHcvbyBncm91cGluZyBleHByZXNzaW9ucyAqLworCWlmICgobGlzdF9sZW5ndGgodGFyZ2V0 LT5leHBycykgKyBsaXN0X2xlbmd0aChncnBfZXhwcnNfZXh0cmEpKSA9PSAwKQorCQlyZXR1cm4g TlVMTDsKKworCWdyb3VwX2NsYXVzZXNfZmluYWwgPSByb290LT5wYXJzZS0+Z3JvdXBDbGF1c2U7 CisKKwkvKgorCSAqIElmIHRoZSBhZ2dyZWdhdGlvbiB0YXJnZXQgc2hvdWxkIGhhdmUgZXh0cmEg Z3JvdXBpbmcgZXhwcmVzc2lvbnMgKGluCisJICogb3JkZXIgdG8gZW1pdCBpbnB1dCB2YXJzIGZv ciBqb2luIGNvbmRpdGlvbnMpLCBhZGQgdGhlbSBub3cuIFRoaXMgc3RlcAorCSAqIGluY2x1ZGVz IGFzc2lnbm1lbnQgb2YgdGxlU29ydEdyb3VwUmVmJ3Mgd2hpY2ggd2UgY2FuIGdlbmVyYXRlIG5v dy4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoZ3JwX2V4cHJzX2V4dHJhKSA+IDApCisJeworCQlJ bmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIE1ha2UgYSBjb3B5IG9mIHRoZSBncm91 cCBjbGF1c2VzIGFzIHdlJ2xsIG5lZWQgdG8gYWRkIHNvbWUgbW9yZQorCQkgKiBjbGF1c2VzLgor CQkgKi8KKwkJZ3JvdXBfY2xhdXNlc19maW5hbCA9IGxpc3RfY29weShncm91cF9jbGF1c2VzX2Zp bmFsKTsKKworCQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBtYXggc29ydGdyb3VwcmVmICovCisJ CXNvcnRncm91cHJlZiA9IDA7CisJCWZvcmVhY2gobGMsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCkK KwkJeworCQkJSW5kZXgJCXJlZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKSktPnJlc3Nv cnRncm91cHJlZjsKKworCQkJaWYgKHJlZiA+IHNvcnRncm91cHJlZikKKwkJCQlzb3J0Z3JvdXBy ZWYgPSByZWY7CisJCX0KKworCQkvKgorCQkgKiBHZW5lcmF0ZSB0aGUgU29ydEdyb3VwQ2xhdXNl J3MgYW5kIGFkZCB0aGUgZXhwcmVzc2lvbnMgdG8gdGhlCisJCSAqIHRhcmdldC4KKwkJICovCisJ CWZvcmVhY2gobGMsIGdycF9leHByc19leHRyYSkKKwkJeworCQkJVmFyCQkgICAqdmFyID0gbGZp cnN0X25vZGUoVmFyLCBsYyk7CisJCQlTb3J0R3JvdXBDbGF1c2UgKmNsID0gbWFrZU5vZGUoU29y dEdyb3VwQ2xhdXNlKTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENs YXVzZS4KKwkJCSAqCisJCQkgKiBBcyB0aGUgZmluYWwgYWdncmVnYXRpb24gd2lsbCBub3QgdXNl IHRoaXMgZ3JvdXBpbmcgZXhwcmVzc2lvbiwKKwkJCSAqIHdlIGRvbid0IGNhcmUgd2hldGhlciBz b3J0b3AgaXMgPCBvciA+LiBUaGUgdmFsdWUgb2YgbnVsbHNfZmlyc3QKKwkJCSAqIHNob3VsZCBu b3QgbWF0dGVyIGZvciB0aGUgc2FtZSByZWFzb24uCisJCQkgKi8KKwkJCWNsLT50bGVTb3J0R3Jv dXBSZWYgPSArK3NvcnRncm91cHJlZjsKKwkJCWdldF9zb3J0X2dyb3VwX29wZXJhdG9ycyh2YXIt PnZhcnR5cGUsCisJCQkJCQkJCQkgZmFsc2UsIHRydWUsIGZhbHNlLAorCQkJCQkJCQkJICZjbC0+ c29ydG9wLCAmY2wtPmVxb3AsIE5VTEwsCisJCQkJCQkJCQkgJmNsLT5oYXNoYWJsZSk7CisJCQln cm91cF9jbGF1c2VzX2ZpbmFsID0gbGFwcGVuZChncm91cF9jbGF1c2VzX2ZpbmFsLCBjbCk7CisJ CQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQodGFyZ2V0LCAoRXhwciAqKSB2YXIsCisJCQkJCQkJ CQkgY2wtPnRsZVNvcnRHcm91cFJlZik7CisKKwkJCS8qCisJCQkgKiBUaGUgYWdncmVnYXRpb24g aW5wdXQgdGFyZ2V0IG11c3QgZW1pdCB0aGlzIHZhciB0b28uCisJCQkgKi8KKwkJCWFkZF9jb2x1 bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChFeHByICopIHZhciwKKwkJCQkJCQkJCSBjbC0+ dGxlU29ydEdyb3VwUmVmKTsKKwkJfQorCX0KKworCS8qCisJICogQnVpbGQgYSBsaXN0IG9mIGdy b3VwaW5nIGV4cHJlc3Npb25zIGFuZCBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBT b3J0R3JvdXBDbGF1c2VzLgorCSAqLworCWkgPSAwOworCXJlc3VsdCA9IG1ha2VOb2RlKFJlbEFn Z0luZm8pOworCWZvcmVhY2gobGMsIHRhcmdldC0+ZXhwcnMpCisJeworCQlJbmRleAkJc29ydGdy b3VwcmVmID0gMDsKKwkJU29ydEdyb3VwQ2xhdXNlICpjbDsKKwkJRXhwcgkgICAqdGV4cHI7CisK KwkJdGV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCisJCUFzc2VydChJc0EodGV4cHIsIFZh cikpOworCisJCXNvcnRncm91cHJlZiA9IHRhcmdldC0+c29ydGdyb3VwcmVmc1tpKytdOworCQlp ZiAoc29ydGdyb3VwcmVmID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBTb3J0 R3JvdXBDbGF1c2UgaW4gZ3JvdXBfY2xhdXNlc19maW5hbCAqLworCQljbCA9IGdldF9zb3J0Z3Jv dXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwgZ3JvdXBfY2xhdXNlc19maW5hbCk7CisKKwkJLyog ZG8gbm90IGFkZCB0aGlzIFNvcnRHcm91cENsYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFk ZGVkICovCisJCWlmIChsaXN0X21lbWJlcihyZXN1bHQtPmdyb3VwX2NsYXVzZXMsIGNsKSkKKwkJ CWNvbnRpbnVlOworCisJCXJlc3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQocmVzdWx0LT5n cm91cF9jbGF1c2VzLCBjbCk7CisJCXJlc3VsdC0+Z3JvdXBfZXhwcnMgPSBsaXN0X2FwcGVuZF91 bmlxdWUocmVzdWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJCSB0ZXhwcik7CisJfQorCisJ LyoKKwkgKiBDYWxjdWxhdGUgcGF0aGtleXMgdGhhdCByZXByZXNlbnQgdGhpcyBncm91cGluZyBy ZXF1aXJlbWVudHMuCisJICovCisJcmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJCW1ha2VfcGF0 aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJ CQkJCSAgbWFrZV90bGlzdF9mcm9tX3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkvKgorCSAqIEFk ZCBhZ2dyZWdhdGVzIHRvIHRoZSBncm91cGluZyB0YXJnZXQuCisJICovCisJZm9yZWFjaChsYywg cm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxm aXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwkJQWdncmVmICAgKmFnZ3JlZjsKKworCQlB c3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJYWdncmVmID0gKEFnZ3Jl ZiAqKSBjb3B5T2JqZWN0KGFjX2luZm8tPmFnZ3JlZik7CisJCW1hcmtfcGFydGlhbF9hZ2dyZWYo YWdncmVmLCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCk7CisKKwkJYWRkX2NvbHVtbl90b19wYXRo dGFyZ2V0KHRhcmdldCwgKEV4cHIgKikgYWdncmVmLCAwKTsKKworCQlyZXN1bHQtPmFnZ19leHBy cyA9IGxhcHBlbmQocmVzdWx0LT5hZ2dfZXhwcnMsIGFnZ3JlZik7CisJfQorCisJLyoKKwkgKiBT aW5jZSBuZWl0aGVyIHRhcmdldCBub3IgYWdnX2lucHV0IGlzIHN1cHBvc2VkIHRvIGJlIGlkZW50 aWNhbCB0byB0aGUKKwkgKiBzb3VyY2UgcmVsdGFyZ2V0LCBjb21wdXRlIHRoZSB3aWR0aCBhbmQg Y29zdCBhZ2Fpbi4KKwkgKi8KKwlzZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3QsIHRhcmdl dCk7CisJc2V0X3BhdGh0YXJnZXRfY29zdF93aWR0aChyb290LCBhZ2dfaW5wdXQpOworCisJcmVz dWx0LT5yZWxpZHMgPSBibXNfY29weShyZWwtPnJlbGlkcyk7CisJcmVzdWx0LT50YXJnZXQgPSB0 YXJnZXQ7CisJcmVzdWx0LT5hZ2dfaW5wdXQgPSBhZ2dfaW5wdXQ7CisKKwkvKgorCSAqIFRoZSBu dW1iZXIgb2YgYWdncmVnYXRpb24gaW5wdXQgcm93cyBpcyBzaW1wbHkgdGhlIG51bWJlciBvZiBy b3dzIG9mIHRoZQorCSAqIG5vbi1ncm91cGVkIHJlbGF0aW9uLCB3aGljaCBzaG91bGQgaGF2ZSBi ZWVuIGVzdGltYXRlZCBieSBub3cuCisJICovCisJcmVzdWx0LT5pbnB1dF9yb3dzID0gcmVsLT5y b3dzOworCisJLyogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBncm91cHMgd2l0aCBlcXVhbCBncm91 cGVkIGV4cHJzLiAqLworCXJlc3VsdC0+Z3JvdXBlZF9yb3dzID0gZXN0aW1hdGVfbnVtX2dyb3Vw cyhyb290LCByZXN1bHQtPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkgICByZXN1bHQtPmlucHV0 X3Jvd3MsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGVhZ2Vy X2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbgorICogCSAgQ2hlY2sgaWYgaXQncyBw b3NzaWJsZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi4K KyAqLworc3RhdGljIGJvb2wKK2VhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlv bihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCUxpc3RDZWxsICAgKmxj OworCisJLyoKKwkgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBlYWdlciBhZ2dyZWdh dGlvbiBjYW5ub3QgaGFuZGxlCisJICogUGxhY2VIb2xkZXJWYXIgKFBIVikuCisJICoKKwkgKiBJ ZiB3ZSBrbmV3IHRoYXQgdGhlIFBIViBzaG91bGQgYmUgZXZhbHVhdGVkIGluIHRoaXMgdGFyZ2V0 IChhbmQgb2YKKwkgKiBjb3Vyc2UsIGlmIGl0cyBleHByZXNzaW9uIG1hdGNoZWQgc29tZSBBZ2dy ZWYgYXJndW1lbnQpLCB3ZSdkIGp1c3QgbGV0CisJICogaW5pdF9ncm91cGluZ190YXJnZXRzIGFk ZCB0aGF0IEFnZ3JlZi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGtuZXcKKwkgKiB0aGF0IHRo ZSBQSFYgaXMgZXZhbHVhdGVkIGJlbG93IHRoZSBjdXJyZW50IHJlbCwgd2UgY291bGQgaWdub3Jl IGl0CisJICogYmVjYXVzZSB0aGUgcmVmZXJlbmNpbmcgQWdncmVmIHdvdWxkIHRha2UgY2FyZSBv ZiBwcm9wYWdhdGlvbiBvZiB0aGUKKwkgKiB2YWx1ZSB0byB1cHBlciBqb2lucy4KKwkgKgorCSAq IFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHNhbWUgUEhWIGNhbiBiZSBldmFsdWF0ZWQgaW4gdGhl IHRhcmdldCBvZiB0aGUKKwkgKiBjdXJyZW50IHJlbCBvciBpbiB0aGF0IG9mIGxvd2VyIHJlbCAt LS0gZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBwYXRocy4KKwkgKiBGb3IgZXhhbXBsZSwgY29uc2lk ZXIgcmVsLT5yZWxpZHMgPSB7QSwgQiwgQ30gYW5kIGlmIHBoX2V2YWxfYXQgPSB7QiwKKwkgKiBD fS4gUGF0aCAiQSBKT0lOIChCIEpPSU4gQykiIGltcGxpZXMgdGhhdCB0aGUgUEhWIGlzIGV2YWx1 YXRlZCBieSB0aGUKKwkgKiAiKEIgSk9JTiBDKSIsIHdoaWxlIHBhdGggIihBIEpPSU4gQikgSk9J TiBDIiBldmFsdWF0ZXMgdGhlIFBIViBpdHNlbGYuCisJICovCisJZm9yZWFjaChsYywgcmVsLT5y ZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7CisKKwkJ aWYgKElzQShleHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ aWYgKElTX1NJTVBMRV9SRUwocmVsKSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3Qt PnNpbXBsZV9ydGVfYXJyYXlbcmVsLT5yZWxpZF07OworCisJCS8qCisJCSAqIHJ0ZWtpbmQgIT0g UlRFX1JFTEFUSU9OIGNhc2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisJCSAqLworCQlpZiAocnRl LT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBD YWxsZXIgc2hvdWxkIG9ubHkgcGFzcyBiYXNlIHJlbGF0aW9ucyBvciBqb2lucy4gKi8KKwlBc3Nl cnQocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMIHx8CisJCSAgIHJlbC0+cmVsb3B0 a2luZCA9PSBSRUxPUFRfSk9JTlJFTCk7CisKKwkvKgorCSAqIENoZWNrIGlmIGFsbCBhZ2dyZWdh dGUgZXhwcmVzc2lvbnMgY2FuIGJlIGV2YWx1YXRlZCBvbiB0aGlzIHJlbGF0aW9uCisJICogbGV2 ZWwuCisJICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdn Q2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwor CQlBc3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJLyoKKwkJICogR2l2 ZSB1cCBpZiBhbnkgYWdncmVnYXRlIG5lZWRzIHJlbGF0aW9ucyBvdGhlciB0aGFuIHRoZSBjdXJy ZW50IG9uZS4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBuZWVkcyB0aGUgY3VycmVudCBy ZWwgcGx1cyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZQorCQkgKiBwcm9ibGVtIGlzIHRoYXQgZ3Jv dXBpbmcgb2YgdGhlIGN1cnJlbnQgcmVsYXRpb24gY291bGQgbWFrZSBzb21lCisJCSAqIGlucHV0 IHZhcmlhYmxlcyB1bmF2YWlsYWJsZSBmb3IgdGhlICJoaWdoZXIgYWdncmVnYXRlIiwgYW5kIGl0 J2QKKwkJICogYWxzbyBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3MgdGhlICJoaWdo ZXIgYWdncmVnYXRlIgorCQkgKiByZWNlaXZlcy4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0 ZSBkb2VzIG5vdCBldmVuIG5lZWQgdGhlIGN1cnJlbnQgcmVsLCB0aGVuIHRoZQorCQkgKiBjdXJy ZW50IHJlbCBzaG91bGQgYmUgZ3JvdXBlZCBiZWNhdXNlIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW4g b2YgdHdvCisJCSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vi c2V0KGFjX2luZm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMK KyAqCSAgSW5pdGlhbGl6ZSB0YXJnZXQgZm9yIGdyb3VwZWQgcGF0aHMgKHRhcmdldCkgYXMgd2Vs bCBhcyBhIHRhcmdldCBmb3IKKyAqCSAgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhl IGdyb3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogZ3JvdXBfZXhwcnNfZXh0cmFfcCBy ZWNlaXZlcyBhIGxpc3Qgb2YgVmFyIG5vZGVzIGZvciB3aGljaCB3ZSBuZWVkIHRvCisgKiBjb25z dHJ1Y3QgU29ydEdyb3VwQ2xhdXNlLiBUaG9zZSB2YXJzIHdpbGwgdGhlbiBiZSB1c2VkIGFzIGFk ZGl0aW9uYWwKKyAqIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBmb3IgdGhlIHNha2Ugb2Ygam9pbiBj bGF1c2VzLgorICoKKyAqIFJldHVybiB0cnVlIGlmZiB0aGUgdGFyZ2V0cyBjb3VsZCBiZSBpbml0 aWFsaXplZC4KKyAqLworc3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwg UGF0aFRhcmdldCAqYWdnX2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9leHByc19leHRyYV9w KQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnBvc3NpYmx5X2RlcGVuZGVudCA9IE5J TDsKKworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwl7CisJCUV4cHIJICAg KmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJ CS8qCisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xkZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVz IGZyb20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVnYXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNh bm5vdCBjb250YWluIGFueXRoaW5nIG1vcmUgY29tcGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkg Ki8KKwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsKKworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJl ZiBpZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3VwaW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRn cm91cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihyb290LCBleHByKTsKKwkJaWYg KHNvcnRncm91cHJlZiA+IDApCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGUgdGFyZ2V0IGV4cHJl c3Npb24gY2FuIGJlIHVzZWQgYXMgdGhlIGdyb3VwaW5nIGtleSwgaXQKKwkJCSAqIHNob3VsZCBi ZSBlbWl0dGVkIGJ5IHRoZSBncm91cGVkIHBhdGhzIHRoYXQgaGF2ZSBiZWVuIHB1c2hlZAorCQkJ ICogZG93biB0byB0aGlzIHJlbGF0aW9uIGxldmVsLgorCQkJICovCisJCQlhZGRfY29sdW1uX3Rv X3BhdGh0YXJnZXQodGFyZ2V0LCBleHByLCBzb3J0Z3JvdXByZWYpOworCisJCQkvKgorCQkJICog Li4uIGFuZCBpdCBhbHNvIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBpbnB1dCBwYXRocworCQkJ ICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0Z3Jv dXByZWYpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGlzX3Zhcl9uZWVkZWRfYnlfam9pbihy b290LCAoVmFyICopIGV4cHIsIHJlbCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGUgdmFyaWFi bGUgaXMgbmVlZGVkIGZvciBhIGpvaW4sIGhvd2V2ZXIgaXQncyBuZWl0aGVyIGluCisJCQkJICog dGhlIEdST1VQIEJZIGNsYXVzZSBub3IgY2FuIGl0IGJlIGRlcml2ZWQgZnJvbSBpdCB1c2luZyBF Qy4KKwkJCQkgKiAoT3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQgdG8gdGhlIHRh cmdldHMgYWJvdmUuKQorCQkJCSAqIFdlIG5lZWQgdG8gY29uc3RydWN0IHNwZWNpYWwgU29ydEdy b3VwQ2xhdXNlIGZvciB0aGlzCisJCQkJICogdmFyaWFibGUuCisJCQkJICoKKwkJCQkgKiBOb3Rl IHRoYXQgaXRzIHRsZVNvcnRHcm91cFJlZiBuZWVkcyB0byBiZSB1bmlxdWUgd2l0aGluCisJCQkJ ICogYWdnX2lucHV0LCBzbyB3ZSBuZWVkIHRvIHBvc3Rwb25lIGNyZWF0aW9uIG9mIHRoZQorCQkJ CSAqIFNvcnRHcm91cENsYXVzZSdzIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCB0aGUgaXRlcmF0aW9u IG9mCisJCQkJICogcmVsLT5yZWx0YXJnZXQtPmV4cHJzLiBBbHNvIGl0IG1ha2VzIHNlbnNlIGZv ciB0aGUgY2FsbGVyIHRvCisJCQkJICogZG8gc29tZSBtb3JlIGNoZWNrIGJlZm9yZSBpdCBzdGFy dHMgdG8gY3JlYXRlIHRob3NlCisJCQkJICogU29ydEdyb3VwQ2xhdXNlJ3MuCisJCQkJICovCisJ CQkJKmdyb3VwX2V4cHJzX2V4dHJhX3AgPSBsYXBwZW5kKCpncm91cF9leHByc19leHRyYV9wLCBl eHByKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlzX3Zhcl9pbl9hZ2dyZWZfb25seShyb290LCAoVmFy ICopIGV4cHIpKQorCQkJeworCQkJCS8qCisJCQkJICogQW5vdGhlciByZWFzb24gd2UgbWlnaHQg bmVlZCB0aGlzIHZhcmlhYmxlIGlzIHRoYXQgc29tZQorCQkJCSAqIGFnZ3JlZ2F0ZSBwdXNoZWQg ZG93biB0byB0aGlzIHJlbGF0aW9uIHJlZmVyZW5jZXMgaXQuIEluCisJCQkJICogc3VjaCBhIGNh c2UsIGFkZCBpdCB0byAiYWdnX2lucHV0IiwgYnV0IG5vdCB0byAidGFyZ2V0Ii4KKwkJCQkgKiBI b3dldmVyLCBpZiB0aGUgYWdncmVnYXRlIGlzIG5vdCB0aGUgb25seSByZWFzb24gZm9yIHRoZSB2 YXIKKwkJCQkgKiB0byBiZSBpbiB0aGUgdGFyZ2V0LCBzb21lIG1vcmUgY2hlY2tzIG5lZWQgdG8g YmUgcGVyZm9ybWVkCisJCQkJICogYmVsb3cuCisJCQkJICovCisJCQkJYWRkX25ld19jb2x1bW5f dG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CS8qCisJCQkJICogVGhlIFZhciBjYW4gYmUgZnVuY3Rpb25hbGx5IGRlcGVuZGVudCBvbiBhbm90 aGVyIGV4cHJlc3Npb24KKwkJCQkgKiBvZiB0aGUgdGFyZ2V0LCBidXQgd2UgY2Fubm90IGNoZWNr IHRoYXQgdW50aWwgd2UndmUgYnVpbHQKKwkJCQkgKiBhbGwgdGhlIGV4cHJlc3Npb25zIGZvciB0 aGUgdGFyZ2V0LgorCQkJCSAqLworCQkJCXBvc3NpYmx5X2RlcGVuZGVudCA9IGxhcHBlbmQocG9z c2libHlfZGVwZW5kZW50LCBleHByKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogTm93IHdl IGNhbiBjaGVjayB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIGZ1bmN0aW9uYWxseSBkZXBlbmRl bnQgb24KKwkgKiBhbm90aGVyIG9uZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwb3NzaWJseV9kZXBl bmRlbnQpCisJeworCQlWYXIJCSAgICp0dmFyOworCQlMaXN0CSAgICpkZXBzID0gTklMOworCQlS YW5nZVRibEVudHJ5ICpydGU7CisKKwkJdHZhciA9IGxmaXJzdF9ub2RlKFZhciwgbGMpOworCQly dGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3R2YXItPnZhcm5vXTsKKworCQkvKgorCQkgKiBD aGVjayBpZiB0aGUgVmFyIGNhbiBiZSBpbiB0aGUgZ3JvdXBpbmcga2V5IGV2ZW4gdGhvdWdoIGl0 J3Mgbm90CisJCSAqIG1lbnRpb25lZCBieSB0aGUgR1JPVVAgQlkgY2xhdXNlIChhbmQgY291bGQg bm90IGJlIGRlcml2ZWQgdXNpbmcKKwkJICogRUNzKS4KKwkJICovCisJCWlmIChjaGVja19mdW5j dGlvbmFsX2dyb3VwaW5nKHJ0ZS0+cmVsaWQsIHR2YXItPnZhcm5vLAorCQkJCQkJCQkJICB0dmFy LT52YXJsZXZlbHN1cCwKKwkJCQkJCQkJCSAgdGFyZ2V0LT5leHBycywgJmRlcHMpKQorCQl7CisJ CQkvKgorCQkJICogVGhlIHZhciBzaG91bGRuJ3QgYmUgYWN0dWFsbHkgdXNlZCBmb3IgZ3JvdXBp bmcga2V5IGV2YWx1YXRpb24KKwkJCSAqIChpbnN0ZWFkLCB0aGUgb25lIHRoaXMgZGVwZW5kcyBv biB3aWxsIGJlKSwgc28gc29ydGdyb3VwcmVmCisJCQkgKiBzaG91bGQgbm90IGJlIGltcG9ydGFu dC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHBy ICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChF eHByICopIHR2YXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEFzIGxvbmcgYXMg dGhlIHF1ZXJ5IGlzIHNlbWFudGljYWxseSBjb3JyZWN0LCBhcnJpdmluZyBoZXJlCisJCQkgKiBt ZWFucyB0aGF0IHRoZSB2YXIgaXMgcmVmZXJlbmNlZCBieSBhIGdlbmVyaWMgZ3JvdXBpbmcKKwkJ CSAqIGV4cHJlc3Npb24gYnV0IG5vdCByZWZlcmVuY2VkIGJ5IGFueSBqb2luLgorCQkJICoKKwkJ CSAqIElmIHRoZSBlYWdlciBhZ2dyZWdhdGlvbiB3aWxsIHN1cHBvcnQgZ2VuZXJpYyBncm91cGlu ZworCQkJICogZXhwcmVzc2lvbiBpbiB0aGUgZnV0dXJlLCBjcmVhdGVfcmVsX2FnZ19pbmZvKCkg d2lsbCBoYXZlIHRvIGFkZAorCQkJICogdGhpcyB2YXJpYWJsZSB0byAiYWdnX2lucHV0IiB0YXJn ZXQgYW5kIGFsc28gYWRkIHRoZSB3aG9sZQorCQkJICogZ2VuZXJpYyBleHByZXNzaW9uIHRvICJ0 YXJnZXQiLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIGlzX3Zhcl9pbl9hZ2dyZWZfb25seQorICoJICBDaGVjayB3aGV0aGVy IGdpdmVuIFZhciBhcHBlYXJzIGluIEFnZ3JlZihzKSB3aGljaCB3ZSBjb25zaWRlciB1c2FibGUg YXQKKyAqCSAgcmVsYXRpb24gLyBqb2luIGxldmVsLCBhbmQgb25seSBpbiB0aGUgQWdncmVmKHMp LgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpy b290LCBWYXIgKnZhcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rf bm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYs IEFnZ3JlZikpOworCisJCWlmIChibXNfaXNfbWVtYmVyKHZhci0+dmFybm8sIGFjX2luZm8tPmFn Z19ldmFsX2F0KSkKKwkJCWJyZWFrOzsKKwl9CisKKwkvKiBObyBhZ2dyZWdhdGUgcmVmZXJlbmNl cyB0aGUgVmFyPyAqLworCWlmIChsYyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBE b2VzIHRoZSBWYXIgYXBwZWFyIGluIHRoZSB0YXJnZXQgb3V0c2lkZSBhZ2dyZWdhdGVzPyAqLwor CWZvcmVhY2gobGMsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCkKKwl7CisJCVRhcmdldEVudHJ5ICp0 bGUgPSBsZmlyc3Rfbm9kZShUYXJnZXRFbnRyeSwgbGMpOworCQlMaXN0CSAgICp2YXJzOworCisJ CWlmIChJc0EodGxlLT5leHByLCBBZ2dyZWYpKQorCQkJY29udGludWU7CisKKwkJdmFycyA9IHB1 bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSB0bGUtPmV4cHIsCisJCQkJCQkJICAgUFZDX1JFQ1VSU0Vf V0lORE9XRlVOQ1MgfAorCQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVSUyk7CisJCWlm IChsaXN0X21lbWJlcih2YXJzLCB2YXIpKQorCQl7CisJCQlsaXN0X2ZyZWUodmFycyk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQlsaXN0X2ZyZWUodmFycyk7CisJfQorCisJLyogVGhlIFZh ciBpcyBpbiBhZ2dyZWdhdGUocykgYW5kIG9ubHkgdGhlcmUuICovCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBpc192YXJfbmVlZGVkX2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVu IFZhciBpcyBuZWVkZWQgYnkgam9pbnMgYWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIENv bnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIg Zm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2Zyhi LnkpCisgKiAgICBGUk9NIGEgSk9JTiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5p OworICoKKyAqIENvbHVtbiBiLmogbmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5 IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1 dCBvZiB0aGUgam9pbiBleHByZXNzaW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRl ZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsKQor eworCVJlbGlkcwkJcmVsaWRzOworCWludAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2VyZWw7 CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3aGVuIHdlIGFyZSBjaGVja2luZyBpZiB0aGUgVmFyIGlz IG5lZWRlZCBieSBqb2lucyBhYm92ZSwgd2UKKwkgKiB3YW50IHRvIGV4Y2x1ZGUgdGhlIHNpdHVh dGlvbiB3aGVyZSB0aGUgVmFyIGlzIG9ubHkgbmVlZGVkIGluIGZpbmFsCisJICogb3V0cHV0LiAg U28gaW5jbHVkZSAicmVsYXRpb24gMCIgaGVyZS4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShy ZWwtPnJlbGlkcyk7CisJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJh c2VyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52 YXJhdHRubyAtIGJhc2VyZWwtPm1pbl9hdHRyOworCisKKwlyZXR1cm4gYm1zX25vbmVtcHR5X2Rp ZmZlcmVuY2UoYmFzZXJlbC0+YXR0cl9uZWVkZWRbYXR0bm9dLCByZWxpZHMpOworfQorCisvKgor ICogZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmCisgKgkgIFJldHVybiBzb3J0Z3JvdXByZWYg aWYgdGhlIGdpdmVuICdleHByJyBjYW4gYmUgdXNlZCBhcyBhIGdyb3VwaW5nCisgKgkgIGV4cHJl c3Npb24gaW4gZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBvciBqb2luIHJlbGF0aW9ucywgb3IgMCBv dGhlcndpc2UuCisgKgorICogTm90ZSB0aGF0IHdlIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGUg J2V4cHInIGlzIGtub3duIGVxdWFsIHRvIG90aGVyIGV4cHJzCisgKiBkdWUgdG8gZXF1aXZhbGVu Y2UgcmVsYXRpb25zaGlwcyB0aGF0IGNhbiBhY3QgYXMgZ3JvdXBpbmcgZXhwcmVzc2lvbnMuCisg Ki8KK3N0YXRpYyBJbmRleAorZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZv ICpyb290LCBFeHByICpleHByKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywg cm9vdC0+Z3JvdXBfZXhwcl9saXN0KQorCXsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbyA9IGxm aXJzdF9ub2RlKEdyb3VwRXhwckluZm8sIGxjKTsKKworCQlBc3NlcnQoSXNBKGdlX2luZm8tPmV4 cHIsIFZhcikpOworCisJCWlmIChlcXVhbChnZV9pbmZvLT5leHByLCBleHByKSB8fAorCQkJZXhw cnNfa25vd25fZXF1YWwocm9vdCwgKE5vZGUgKikgZXhwciwgKE5vZGUgKikgZ2VfaW5mby0+ZXhw ciwKKwkJCQkJCQkgIGdlX2luZm8tPmJ0cmVlX29wZmFtaWx5KSkKKwkJeworCQkJQXNzZXJ0KGdl X2luZm8tPnNvcnRncm91cHJlZiA+IDApOworCisJCQlyZXR1cm4gZ2VfaW5mby0+c29ydGdyb3Vw cmVmOworCQl9CisJfQorCisJLyogVGhlIGV4cHJlc3Npb24gY2Fubm90IGJlIHVzZWQgYXMgZ3Jv dXBpbmcga2V5LiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRl eCBjZWE3NzdlOWQ0Li5kMTM2NTIyOWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAt MzMxMywxMCArMzMxMywxMSBAQCBhZGRfdW5pcXVlX2dyb3VwX3ZhcihQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqdmFyaW5mb3MsCiAKIAkJLyoKIAkJICogRHJvcCBrbm93bi1lcXVhbCB2YXJzLCBi dXQgb25seSBpZiB0aGV5IGJlbG9uZyB0byBkaWZmZXJlbnQKLQkJICogcmVsYXRpb25zIChzZWUg Y29tbWVudHMgZm9yIGVzdGltYXRlX251bV9ncm91cHMpCisJCSAqIHJlbGF0aW9ucyAoc2VlIGNv bW1lbnRzIGZvciBlc3RpbWF0ZV9udW1fZ3JvdXBzKS4gIFdlIGFyZW4ndCB0b28KKwkJICogZnVz c3kgYWJvdXQgdGhlIHNlbWFudGljcyBvZiAiZXF1YWwiIGhlcmUuCiAJCSAqLwogCQlpZiAodmFy ZGF0YS0+cmVsICE9IHZhcmluZm8tPnJlbCAmJgotCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwg dmFyLCB2YXJpbmZvLT52YXIpKQorCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwgdmFyLCB2YXJp bmZvLT52YXIsIEludmFsaWRPaWQpKQogCQl7CiAJCQlpZiAodmFyaW5mby0+bmRpc3RpbmN0IDw9 IG5kaXN0aW5jdCkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNjllZDllYjFmNi4uM2Vm NTE5NTMyMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTQyOSw2ICs0MjksMTIgQEAgc3RydWN0 IFBsYW5uZXJJbmZvCiAJICovCiAJUmVsSW5mb0xpc3QJCXVwcGVyX3JlbHNbVVBQRVJSRUxfRklO QUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOzsKIAorCS8qCisJICogbGlz dCBvZiBncm91cGVkIHJlbGF0aW9uIFJlbEFnZ0luZm9zLiBPbmUgaW5zdGFuY2Ugb2YgUmVsQWdn SW5mbyBwZXIKKwkgKiBpdGVtIG9mIHRoZSB1cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JP VVBfQUdHXSBsaXN0LgorCSAqLworCVJlbEluZm9MaXN0ICphZ2dfaW5mb19saXN0OworCiAJLyog UmVzdWx0IHRsaXN0cyBjaG9zZW4gYnkgZ3JvdXBpbmdfcGxhbm5lciBmb3IgdXBwZXItc3RhZ2Ug cHJvY2Vzc2luZyAqLwogCXN0cnVjdCBQYXRoVGFyZ2V0ICp1cHBlcl90YXJnZXRzW1VQUEVSUkVM X0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAppbmRleCBjNDNkOTdiNDhhLi44ZDAzY2UyYzU3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtMzEwLDYgKzMxMCwxMCBAQCBleHRlcm4gUmVsT3B0SW5mbyAqZmlu ZF9iYXNlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJ bmZvICpmaW5kX2Jhc2VfcmVsX25vZXJyKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwog ZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcyk7CitleHRlcm4gdm9pZCBhZGRfZ3JvdXBlZF9y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQlSZWxBZ2dJbmZv ICphZ2dfaW5mbyk7CitleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9ncm91cGVkX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywKKwkJCQkJCQkJCVJlbEFnZ0luZm8gKiphZ2dfaW5m b19wKTsKIGV4dGVybiBSZWxPcHRJbmZvICpidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJICBSZWxpZHMgam9pbnJlbGlkcywKIAkJCQkJCQkJICBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCkBAIC0zNDQsNCArMzQ4LDUgQEAgZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX2No aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnBh cmVudF9qb2lucmVsLCBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5J bmZvICpzamluZm8pOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3JlYXRlX3JlbF9hZ2dfaW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNlbmRpZgkJCQkJCQkvKiBQQVRI Tk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDA0MGEwNDdiODEuLmRjZWExMDg4OGIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRocy5oCkBAIC0xNjAsNyArMTYwLDggQEAgZXh0ZXJuIExpc3QgKmdl bmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzX2Zvcl9lY3MoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkJICBSZWxpZHMgam9pbl9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJICBSZWxp ZHMgb3V0ZXJfcmVsaWRzLAogCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJfcmVsKTsK LWV4dGVybiBib29sIGV4cHJzX2tub3duX2VxdWFsKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpp dGVtMSwgTm9kZSAqaXRlbTIpOworZXh0ZXJuIGJvb2wgZXhwcnNfa25vd25fZXF1YWwoUGxhbm5l ckluZm8gKnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwKKwkJCQkJCQkgIE9pZCBvcGZh bWlseSk7CiBleHRlcm4gRXF1aXZhbGVuY2VDbGFzcyAqbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWln bl9rZXlfY29sKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCQkgICBGb3JlaWduS2V5 T3B0SW5mbyAqZmtpbmZvLAogCQkJCQkJCQkJCQkJCQkgICBpbnQgY29sbm8pOwotLSAKMi4zMS4w Cgo= --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Disposition: attachment; filename="v2-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3ou1 RnJvbSAwZTJmYTE1NTA1MTM1N2VkZTVmMjRhOGJhMTE0N2U5MDA5NTY2NTcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMToxMjoxOCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg Mi85XSBJbnRyb2R1Y2UgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUgdG8gc3RvcmUgaW5mbyBmb3IKIGdy b3VwZWQgcGF0aHMuCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIFJlbEFnZ0luZm8gc3RydWN0dXJl IHRvIHN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZAp0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3Ig YmFzZSBhbmQgam9pbiByZWxzLiAgSXQgYWxzbyByZXZpc2VzIHRoZQpSZWxJbmZvTGlzdCByZWxh dGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQKd2l0 aCBSZWxBZ2dJbmZvcy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMg fCA2NiArKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNo YW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggOWUyNTc1MGFjZC4uYzg4ZGE5NjNkYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtMzYsMTMgKzM2LDEzIEBACiAKIAogLyoKLSAq IEFuIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1cCBmb3Ig UmVsT3B0SW5mbwotICogc3RydWN0dXJlcyBtb3JlIGVmZmljaWVudC4KKyAqIEFuIGVudHJ5IG9m IGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1cCBmb3IgUmVsT3B0SW5mbyBv cgorICogUmVsQWdnSW5mbyBzdHJ1Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgogICovCiB0eXBlZGVm IHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKIAlSZWxpZHMJCXJlbGlkczsJCQkvKiBoYXNoIGtleSAt LS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9wdEluZm8gKnJlbDsKKwl2b2lkCSAgICpkYXRhOwog fSBSZWxJbmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCkBAIC00NzcsNyArNDc3LDcgQEAgZmlu ZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKQogCiAv KgogICogYnVpbGRfcmVsX2hhc2gKLSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0 YWJsZSBmb3IgcmVsYXRpb25zLgorICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRh YmxlIGZvciByZWxhdGlvbiBzcGVjaWZpYyBkYXRhLgogICovCiBzdGF0aWMgdm9pZAogYnVpbGRf cmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCkBAIC00OTcsMTkgKzQ5NywyNyBAQCBidWlsZF9y ZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIAkJCQkJCSAgJmhhc2hfY3RsLAogCQkJCQkJICBI QVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsK IAotCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRpb25zICovCisJLyog SW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyByZWxhdGlvbiBzcGVjaWZpYyBpbmZvcyAq LwogCWZvcmVhY2gobCwgbGlzdC0+aXRlbXMpCiAJewotCQlSZWxPcHRJbmZvICpyZWwgPSAoUmVs T3B0SW5mbyAqKSBsZmlyc3QobCk7CisJCXZvaWQJICAgKml0ZW0gPSBsZmlyc3QobCk7CiAJCVJl bEluZm9FbnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKKwkJUmVsaWRzCQlyZWxpZHM7CisK KwkJQXNzZXJ0KElzQShpdGVtLCBSZWxPcHRJbmZvKSB8fCBJc0EoaXRlbSwgUmVsQWdnSW5mbykp OworCisJCWlmIChJc0EoaXRlbSwgUmVsT3B0SW5mbykpCisJCQlyZWxpZHMgPSAoKFJlbE9wdElu Zm8gKikgaXRlbSktPnJlbGlkczsKKwkJZWxzZQorCQkJcmVsaWRzID0gKChSZWxBZ2dJbmZvICop IGl0ZW0pLT5yZWxpZHM7CiAKIAkJaGVudHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJj aChoYXNodGFiLAotCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgICZy ZWxpZHMsCiAJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKIAkJCQkJCQkJCQkJICAmZm91bmQpOwog CQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5yZWwgPSByZWw7CisJCWhlbnRyeS0+ZGF0YSA9 IGl0ZW07CiAJfQogCiAJbGlzdC0+aGFzaCA9IGhhc2h0YWI7CkBAIC01MTcsOSArNTI1LDkgQEAg YnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCiAKIC8qCiAgKiBmaW5kX3JlbF9pbmZv Ci0gKgkgIEZpbmQgYW4gUmVsT3B0SW5mbyBlbnRyeS4KKyAqCSAgRmluZCBhbiBSZWxPcHRJbmZv IG9yIGEgUmVsQWdnSW5mbyBlbnRyeS4KICAqLwotc3RhdGljIFJlbE9wdEluZm8gKgorc3RhdGlj IHZvaWQgKgogZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykK IHsKIAlpZiAobGlzdCA9PSBOVUxMKQpAQCAtNTUwLDcgKzU1OCw3IEBAIGZpbmRfcmVsX2luZm8o UmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiAJCQkJCQkJCQkJCSAgSEFTSF9GSU5E LAogCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlpZiAoaGVudHJ5KQotCQkJcmV0dXJuIGhlbnRyeS0+ cmVsOworCQkJcmV0dXJuIGhlbnRyeS0+ZGF0YTsKIAl9CiAJZWxzZQogCXsKQEAgLTU1OCwxMCAr NTY2LDE4IEBAIGZpbmRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMp CiAKIAkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJewotCQkJUmVsT3B0SW5mbyAqcmVsID0g KFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOworCQkJdm9pZAkgICAqaXRlbSA9IGxmaXJzdChsKTsK KwkJCVJlbGlkcwkJaXRlbV9yZWxpZHMgPSBOVUxMOworCisJCQlBc3NlcnQoSXNBKGl0ZW0sIFJl bE9wdEluZm8pIHx8IElzQShpdGVtLCBSZWxBZ2dJbmZvKSk7CiAKLQkJCWlmIChibXNfZXF1YWwo cmVsLT5yZWxpZHMsIHJlbGlkcykpCi0JCQkJcmV0dXJuIHJlbDsKKwkJCWlmIChJc0EoaXRlbSwg UmVsT3B0SW5mbykpCisJCQkJaXRlbV9yZWxpZHMgPSAoKFJlbE9wdEluZm8gKikgaXRlbSktPnJl bGlkczsKKwkJCWVsc2UgaWYgKElzQShpdGVtLCBSZWxBZ2dJbmZvKSkKKwkJCQlpdGVtX3JlbGlk cyA9ICgoUmVsQWdnSW5mbyAqKSBpdGVtKS0+cmVsaWRzOworCisJCQlpZiAoYm1zX2VxdWFsKGl0 ZW1fcmVsaWRzLCByZWxpZHMpKQorCQkJCXJldHVybiBpdGVtOwogCQl9CiAJfQogCkBAIC01NzYs MzIgKzU5Miw0MCBAQCBmaW5kX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxpZHMgcmVs aWRzKQogUmVsT3B0SW5mbyAqCiBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKQogewotCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3Qs IHJlbGlkcyk7CisJcmV0dXJuIChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2luZm8ocm9vdC0+am9p bl9yZWxfbGlzdCwgcmVsaWRzKTsKIH0KIAogLyoKICAqIGFkZF9yZWxfaW5mbwotICoJCUFkZCBn aXZlbiByZWxhdGlvbiB0byB0aGUgZ2l2ZW4gbGlzdC4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGls aWFyeQorICoJCUFkZCByZWxhdGlvbiBzcGVjaWZpYyBpbmZvIHRvIGEgbGlzdCwgYW5kIGFsc28g YWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkKICAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgog ICovCiBzdGF0aWMgdm9pZAotYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJ bmZvICpyZWwpCithZGRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIHZvaWQgKmRhdGEpCiB7 CisJQXNzZXJ0KElzQShkYXRhLCBSZWxPcHRJbmZvKSB8fCBJc0EoZGF0YSwgUmVsQWdnSW5mbykp OworCiAJLyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0 aGUgZW5kIG9mIHRoZSBsaXN0ISAqLwotCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVt cywgcmVsKTsKKwlsaXN0LT5pdGVtcyA9IGxhcHBlbmQobGlzdC0+aXRlbXMsIGRhdGEpOwogCiAJ Lyogc3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUu ICovCiAJaWYgKGxpc3QtPmhhc2gpCiAJeworCQlSZWxpZHMJCXJlbGlkczsKIAkJUmVsSW5mb0Vu dHJ5ICpoZW50cnk7CiAJCWJvb2wJCWZvdW5kOwogCisJCWlmIChJc0EoZGF0YSwgUmVsT3B0SW5m bykpCisJCQlyZWxpZHMgPSAoKFJlbE9wdEluZm8gKikgZGF0YSktPnJlbGlkczsKKwkJZWxzZQor CQkJcmVsaWRzID0gKChSZWxBZ2dJbmZvICopIGRhdGEpLT5yZWxpZHM7CisKIAkJaGVudHJ5ID0g KFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAotCQkJCQkJCQkJCQkgICYo cmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgICZyZWxpZHMsCiAJCQkJCQkJCQkJCSAgSEFTSF9F TlRFUiwKIAkJCQkJCQkJCQkJICAmZm91bmQpOwogCQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5 LT5yZWwgPSByZWw7CisJCWhlbnRyeS0+ZGF0YSA9IGRhdGE7CiAJfQogfQogCkBAIC0xNDk2LDcg KzE1MjAsNyBAQCBmZXRjaF91cHBlcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRp b25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMpCiAJLyogSWYgd2UgYWxyZWFkeSBtYWRlIHRoaXMg dXBwZXJyZWwgZm9yIHRoZSBxdWVyeSwgcmV0dXJuIGl0ICovCiAJaWYgKGxpc3QpCiAJewotCQl1 cHBlcnJlbCA9IGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKKwkJdXBwZXJyZWwgPSAoUmVs T3B0SW5mbyAqKSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CiAJCWlmICh1cHBlcnJlbCkK IAkJCXJldHVybiB1cHBlcnJlbDsKIAl9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGJlNTFlMmM2 NTIuLmQ2N2Y3MjVhZDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMDY1LDYgKzEwNjUsNzkg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCSgocmVsKS0+cGFydF9zY2hlbWUgJiYgKHJl bCktPmJvdW5kaW5mbyAmJiAocmVsKS0+bnBhcnRzID4gMCAmJiBcCiAJIChyZWwpLT5wYXJ0X3Jl bHMgJiYgKHJlbCktPnBhcnRleHBycyAmJiAocmVsKS0+bnVsbGFibGVfcGFydGV4cHJzKQogCisv KgorICogUmVsQWdnSW5mbworICoJCUluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBl ZCBwYXRocyBmb3IgYmFzZSBhbmQgam9pbiByZWxzLgorICoKKyAqICJyZWxpZHMiIGlzIHRoZSBz ZXQgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgKFJUIGluZGV4ZXMpLCBqdXN0IGxpa2Ugd2l0aAor ICogUmVsT3B0SW5mby4KKyAqCisgKiAidGFyZ2V0IiB3aWxsIGJlIHVzZWQgYXMgcGF0aHRhcmdl dCBpZiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpZWQgdG8KKyAqIGJhc2UgcmVsYXRpb24g b3Igam9pbi4gVGhlIHNhbWUgdGFyZ2V0IHdpbGwgYWxzbyAtLS0gaWYgdGhlIHJlbGF0aW9uIGlz IGEKKyAqIGpvaW4gLS0tIGJlIHVzZWQgdG8gam9pbiBncm91cGVkIHBhdGggdG8gYSBub24tZ3Jv dXBlZCBvbmUuICBUaGlzIHRhcmdldCBjYW4KKyAqIGNvbnRhaW4gcGxhaW4tVmFyIGdyb3VwaW5n IGV4cHJlc3Npb25zIGFuZCBBZ2dyZWYgbm9kZXMuCisgKgorICogTm90ZTogVGhlcmUncyBhIGNv bnZlbnRpb24gdGhhdCBBZ2dyZWYgZXhwcmVzc2lvbnMgYXJlIHN1cHBvc2VkIHRvIGZvbGxvdwor ICogdGhlIG90aGVyIGV4cHJlc3Npb25zIG9mIHRoZSB0YXJnZXQuIEl0ZXJhdGlvbnMgb2YgLT5l eHBycyBtYXkgcmVseSBvbiB0aGlzCisgKiBhcnJhbmdlbWVudC4KKyAqCisgKiAiYWdnX2lucHV0 IiBjb250YWlucyBWYXJzIHVzZWQgZWl0aGVyIGFzIGdyb3VwaW5nIGV4cHJlc3Npb25zIG9yIGFn Z3JlZ2F0ZQorICogYXJndW1lbnRzLiBQYXRocyBwcm92aWRpbmcgdGhlIGFnZ3JlZ2F0aW9uIHBs YW4gd2l0aCBpbnB1dCBkYXRhIHNob3VsZCB1c2UKKyAqIHRoaXMgdGFyZ2V0LiBUaGUgb25seSBk aWZmZXJlbmNlIGZyb20gcmVsdGFyZ2V0IG9mIHRoZSBub24tZ3JvdXBlZCByZWxhdGlvbgorICog aXMgdGhhdCBzb21lIGl0ZW1zIGNhbiBoYXZlIHNvcnRncm91cHJlZiBpbml0aWFsaXplZC4KKyAq CisgKiAiaW5wdXRfcm93cyIgaXMgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgaW5wdXQgcm93cyBm b3IgQWdnUGF0aC4gSXQncworICogYWN0dWFsbHkganVzdCBhIHdvcmtzcGFjZSBmb3IgdXNlcnMg b2YgdGhlIHN0cnVjdHVyZSwgaS5lLiBub3QgaW5pdGlhbGl6ZWQKKyAqIHdoZW4gaW5zdGFuY2Ug b2YgdGhlIHN0cnVjdHVyZSBpcyBjcmVhdGVkLgorICoKKyAqICJncm91cGVkX3Jvd3MiIGlzIHRo ZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCByb3dzIG9mIHRoZSBBZ2dQYXRoLgorICoKKyAq ICJncm91cF9jbGF1c2VzIiwgImdyb3VwX2V4cHJzIiBhbmQgImdyb3VwX3BhdGhrZXlzIiBhcmUg bGlzdHMgb2YKKyAqIFNvcnRHcm91cENsYXVzZSwgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBpbmcg ZXhwcmVzc2lvbnMgYW5kIFBhdGhLZXkKKyAqIHJlc3BlY3RpdmVseS4KKyAqCisgKiAiYWdnX2V4 cHJzIiBpcyBhIGxpc3Qgb2YgQWdncmVmIG5vZGVzIGZvciB0aGUgYWdncmVnYXRpb24gb2YgdGhl IHJlbGF0aW9uJ3MKKyAqIHBhdGhzLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxBZ2dJbmZvCit7 CisJcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkK KworCU5vZGVUYWcJCXR5cGU7CisKKwkvKgorCSAqIHRoZSBzYW1lIGFzIGluIFJlbE9wdEluZm87 IHNldCBvZiBiYXNlICsgT0ogcmVsaWRzIChyYW5nZXRhYmxlIGluZGV4ZXMpCisJICovCisJUmVs aWRzCQlyZWxpZHM7CisKKwkvKgorCSAqIHRoZSB0YXJnZXRsaXN0IGZvciBQYXRocyBzY2Fubmlu ZyB0aGlzIGdyb3VwZWQgcmVsOyBsaXN0IG9mIFZhcnMvRXhwcnMsCisJICogY29zdCwgd2lkdGgK KwkgKi8KKwlzdHJ1Y3QgUGF0aFRhcmdldCAqdGFyZ2V0OworCisJLyoKKwkgKiB0aGUgdGFyZ2V0 bGlzdCBmb3IgUGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdyb3VwZWQgcGF0aHMg CisJICovCisJc3RydWN0IFBhdGhUYXJnZXQgKmFnZ19pbnB1dDsKKworCS8qIGVzdGltYXRlZCBu dW1iZXIgb2YgaW5wdXQgdHVwbGVzIGZvciB0aGUgZ3JvdXBlZCBwYXRocyAqLworCUNhcmRpbmFs aXR5CQlpbnB1dF9yb3dzOworCisJLyogZXN0aW1hdGVkIG51bWJlciBvZiByZXN1bHQgdHVwbGVz IG9mIHRoZSBncm91cGVkIHJlbGF0aW9uKi8KKwlDYXJkaW5hbGl0eQkJZ3JvdXBlZF9yb3dzOwor CisJLyogYSBsaXN0IG9mIFNvcnRHcm91cENsYXVzZSdzICovCisJTGlzdAkgICAqZ3JvdXBfY2xh dXNlczsKKwkvKiBhIGxpc3Qgb2YgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpn cm91cF9leHByczsKKwkvKiBhIGxpc3Qgb2YgUGF0aEtleXMgKi8KKwlMaXN0CSAgICpncm91cF9w YXRoa2V5czsKKworCS8qIGEgbGlzdCBvZiBBZ2dyZWYgbm9kZXMgKi8KKwlMaXN0CSAgICphZ2df ZXhwcnM7Cit9IFJlbEFnZ0luZm87CisKIC8qCiAgKiBJbmRleE9wdEluZm8KICAqCQlQZXItaW5k ZXggaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgotLSAKMi4zMS4wCgo= --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Disposition: attachment; filename="v2-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3ow4 RnJvbSAyYTliZGE0MDM0MTdkYWYzNzczZjkwNDc4ZDM0NWFjNjhjNzA5Y2NhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxNDoxOTozOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg NS85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQK IHJlbGF0aW9ucwoKVGhpcyBjb21taXQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIHRoYXQgZ2Vu ZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQKcmVsYXRpb25zIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhh c2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcApvZiBwYXRocyBvZiB0aGUgcGxh aW4gYmFzZSBvciBqb2luIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIHwgMzA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIHwgIDEyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aHMuaCAgICAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwgMzE1IGluc2VydGlv bnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMK aW5kZXggMDY3MmQ4NDU4Zi4uNjMzYjViMGFmMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bm5lci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3RsaXN0LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZXRyZWUuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX2Jp dHV0aWxzLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIC8qIEJp dG1hc2sgZmxhZ3MgZm9yIHB1c2hkb3duX3NhZmV0eV9pbmZvLnVuc2FmZUZsYWdzICovCkBAIC0z MzAzLDYgKzMzMDUsMzExIEBAIGdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgYm9vbCBvdmVycmlkZV9yCiAJfQogfQogCisvKgor ICogZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocworICoJCUdlbmVyYXRlIHBhdGhzIGZvciBhIGdyb3Vw ZWQgcmVsYXRpb24gYnkgYWRkaW5nIHNvcnRlZCBhbmQgaGFzaGVkCisgKgkJcGFydGlhbCBhZ2dy ZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YgcGF0aHMgb2YgdGhlIHBsYWluIGJhc2Ugb3Igam9pbgor ICoJCXJlbGF0aW9uLgorICoKKyAqIFRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYXJlIHByb3ZpZGVk IGJ5IHRoZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZS4KKyAqLwordm9pZAorZ2VuZXJhdGVfZ3JvdXBl ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQsCisJCQkJ CSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwgUmVsQWdnSW5mbyAqYWdnX2luZm8pCit7CisJQWdn Q2xhdXNlQ29zdHMgYWdnX2Nvc3RzOworCWJvb2wJCWNhbl9oYXNoOworCWJvb2wJCWNhbl9zb3J0 OworCVBhdGgJICAgKmNoZWFwZXN0X3RvdGFsX3BhdGggPSBOVUxMOworCVBhdGgJICAgKmNoZWFw ZXN0X3BhcnRpYWxfcGF0aCA9IE5VTEw7CisJZG91YmxlCQlkTnVtR3JvdXBzID0gMDsKKwlkb3Vi bGUJCWROdW1QYXJ0aWFsR3JvdXBzID0gMDsKKworCWlmIChJU19EVU1NWV9SRUwocmVsX3BsYWlu KSkKKwl7CisJCW1hcmtfZHVtbXlfcmVsKHJlbF9ncm91cGVkKTsKKwkJcmV0dXJuOworCX0KKwor CU1lbVNldCgmYWdnX2Nvc3RzLCAwLCBzaXplb2YoQWdnQ2xhdXNlQ29zdHMpKTsKKwlnZXRfYWdn X2NsYXVzZV9jb3N0cyhyb290LCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwgJmFnZ19jb3N0cyk7 CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gcGVyZm9ybSBz b3J0LWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLworCWNhbl9z b3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMpOworCisJ LyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgY29uc2lkZXIgaGFzaC1iYXNlZCBp bXBsZW1lbnRhdGlvbnMgb2YKKwkgKiBncm91cGluZy4KKwkgKi8KKwlBc3NlcnQocm9vdC0+bnVt T3JkZXJlZEFnZ3MgPT0gMCk7CisJY2FuX2hhc2ggPSAoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMg IT0gTklMICYmCisJCQkJZ3JvdXBpbmdfaXNfaGFzaGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVz ZXMpKTsKKworCS8qCisJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUgcGFy dGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKKwkgKiBwYXRocy4gIFdlIGNhbiBvbmx5IGRv IHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGguCisJICovCisJaWYgKHJlbF9wbGFp bi0+cGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfdG90YWxfcGF0aCA9IHJlbF9wbGFp bi0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsX3BhdGggIT0g TlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiBwYXJhbGxlbGlzbSBpcyBwb3NzaWJsZSBmb3IgcmVs X2dyb3VwZWQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisJICogZ2VuZXJhdGluZyBwYXJ0aWFs bHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAgSG93ZXZlciwgaWYgdGhlIHBsYWluIHJlbAorCSAq IGhhcyBubyBwYXJ0aWFsIHBhdGhzLCB0aGVuIHdlIGNhbid0LgorCSAqLworCWlmIChyZWxfZ3Jv dXBlZC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0ICE9 IE5JTCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKHJlbF9wbGFpbi0+ cGFydGlhbF9wYXRobGlzdCk7CisJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVM TCk7CisJfQorCisJLyogRXN0aW1hdGUgbnVtYmVyIG9mIHBhcnRpYWwgZ3JvdXBzLiAqLworCWlm IChjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJCWROdW1Hcm91cHMgPSBlc3RpbWF0ZV9u dW1fZ3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9leHBycywKKwkJCQkJ CQkJCQkgY2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkgTlVMTCwgTlVMTCk7 CisJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCQlkTnVtUGFydGlhbEdyb3Vw cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91 cF9leHBycywKKwkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aC0+cm93cywKKwkJCQkJ CQkJCQkJCU5VTEwsIE5VTEwpOworCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFwZXN0X3RvdGFsX3Bh dGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qCisJCSAqIFVzZSBhbnkg YXZhaWxhYmxlIHN1aXRhYmx5LXNvcnRlZCBwYXRoIGFzIGlucHV0LCBhbmQgYWxzbyBjb25zaWRl cgorCQkgKiBzb3J0aW5nIHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoLgorCQkgKi8KKwkJZm9yZWFj aChsYywgcmVsX3BsYWluLT5wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAqaW5wdXRfcGF0aCA9 IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJYm9vbAkJaXNfc29y dGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUg cGF0aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJ CQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQg aXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgcGFydGlhbCBhZ2dy ZWdhdGlvbi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3Bh dGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJICAgaW5w dXRfcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJCQlpc19z b3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oYWdnX2luZm8tPmdyb3VwX3BhdGhr ZXlzLAorCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSZwcmVzb3J0 ZWRfa2V5cyk7CisJCQlpZiAoIWlzX3NvcnRlZCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRyeSBh dCBsZWFzdCBzb3J0aW5nIHRoZSBjaGVhcGVzdCBwYXRoIGFuZCBhbHNvIHRyeQorCQkJCSAqIGlu Y3JlbWVudGFsbHkgc29ydGluZyBhbnkgcGF0aCB3aGljaCBpcyBwYXJ0aWFsbHkgc29ydGVkCisJ CQkJICogYWxyZWFkeSAobm8gbmVlZCB0byBkZWFsIHdpdGggcGF0aHMgd2hpY2ggaGF2ZSBwcmVz b3J0ZWQKKwkJCQkgKiBrZXlzIHdoZW4gaW5jcmVtZW50YWwgc29ydCBpcyBkaXNhYmxlZCB1bmxl c3MgaXQncyB0aGUKKwkJCQkgKiBjaGVhcGVzdCBpbnB1dCBwYXRoKS4KKwkJCQkgKi8KKwkJCQlp ZiAoaW5wdXRfcGF0aCAhPSBjaGVhcGVzdF90b3RhbF9wYXRoICYmCisJCQkJCShwcmVzb3J0ZWRf a2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYSBzb3J0IGFu ZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8gYSBzb3J0IGlmIHRoZXJl IGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNyZW1lbnRhbCBzb3J0IHdo ZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJCWlmIChwcmVzb3J0ZWRf a2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJCQkJcGF0aCA9IChQYXRo ICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5 cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJCSByZWxf Z3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCQkgYWdnX2lu Zm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRfa2V5cywKKwkJ CQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBxdWFsIGlzIE5JTCBi ZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwgdGhlCisJ CQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkJICovCisJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJCXJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJ CQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NFUklBTCwK KwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJCU5JTCwKKwkJ CQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bUdyb3Vwcyk7CisKKwkJCWFkZF9w YXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJfQorCX0KKworCWlmIChjYW5fc29ydCAmJiBjaGVh cGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8q IFNpbWlsYXIgdG8gYWJvdmUgbG9naWMsIGJ1dCBmb3IgcGFydGlhbCBwYXRocy4gKi8KKwkJZm9y ZWFjaChsYywgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KQorCQl7CisJCQlQYXRoCSAgICpp bnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7CisJCQli b29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoKKwkJCSAq IFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSB0aGUgbm9uLWdyb3VwZWQgcmVsYXRpb24g d2hpY2ggaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBl bnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9yIHRoZSBw YXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3By b2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJ CQkJCQkgICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7 CisKKwkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+ Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJ CQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0 cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlh bGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdo aWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMg ZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJ CQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfcGFydGlhbF9wYXRoICYmCisJ CQkJCShwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJ CQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVy IGJvdGggYSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8g YSBzb3J0IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNy ZW1lbnRhbCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJ CWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJ CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZv LT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJ CQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJ CQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVz b3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkg KiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0 ZWQgdW50aWwgdGhlCisJCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJ CQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5m by0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9J TklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJ CQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bVBhcnRp YWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJ fQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQYXRoIHdo ZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCkKKwl7CisJCVBhdGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0 aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJCSAq IG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBw cm92aWRlcworCQkgKiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRp b24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290 LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfdG90 YWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJ ICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVh dGVkIHVudGlsCisJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJ CQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRh cmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxf U0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5J TCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCWFk ZF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQgYSBwYXJ0 aWFsbHktZ3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQorCSAqLwor CWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBh dGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20g dGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJCSAqIG5vdCBhd2FyZSBvZiBlYWdl ciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkgKiB0aGUg Y29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRo ID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICBy ZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAorCQkJCQkJ CQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlzIE5JTCBi ZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwKKwkJICog dGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLworCQlwYXRo ID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dyb3VwZWQs CisJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJ CUFHR19IQVNIRUQsCisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJ CQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJCQkJCSZh Z2dfY29zdHMsCisJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9wYXJ0aWFs X3BhdGgocmVsX2dyb3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVsX2Zyb21f am9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBn dWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCmluZGV4IDI0NmNkOGY3NDcuLmRjNTU4MmFkYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYwpAQCAtMjY5NSw4ICsyNjk1LDcgQEAgY3JlYXRlX3Byb2plY3Rpb25fcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfUmVzdWx0 OwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFy Z2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5z LCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9 IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87 CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0 aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5w YXJhbGxlbF9zYWZlICYmCkBAIC0yOTQ4LDggKzI5NDcsNyBAQCBjcmVhdGVfaW5jcmVtZW50YWxf c29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJl bDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJjZSBwYXRoJ3MgcGF0aHRh cmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJwYXRoLT5wYXRodGFyZ2V0 OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJh bWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0 aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUt PnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9z YWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZl OwpAQCAtMjk5NSw4ICsyOTkzLDcgQEAgY3JlYXRlX3NvcnRfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29ydCBkb2Vzbid0IHByb2pl Y3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2Ug YXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2Rl LT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBz dWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFs c2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxs ZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMxNTQsOCArMzE1MSw3IEBAIGNy ZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlw ZSA9IFRfQWdnOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0 aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUg YW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFy YW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBh cmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRo bm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlz dWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBkY2VhMTA4ODhi Li42OGZjMDU0MzJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtNTgsNiArNTgsMTAgQEAgZXh0 ZXJuIHZvaWQgZ2VuZXJhdGVfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgYm9vbCBvdmVycmlkZV9yb3dzKTsKIGV4dGVybiB2b2lkIGdl bmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAkJCQkJCQkJCQkgYm9vbCBvdmVycmlkZV9yb3dzKTsKK2V4dGVybiB2b2lkIGdlbmVy YXRlX2dyb3VwZWRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIFJlbE9wdElu Zm8gKnJlbF9ncm91cGVkLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWxfcGxhaW4sCisJCQkJ CQkJCSAgIFJlbEFnZ0luZm8gKmFnZ19pbmZvKTsKIGV4dGVybiBpbnQJY29tcHV0ZV9wYXJhbGxl bF93b3JrZXIoUmVsT3B0SW5mbyAqcmVsLCBkb3VibGUgaGVhcF9wYWdlcywKIAkJCQkJCQkJCWRv dWJsZSBpbmRleF9wYWdlcywgaW50IG1heF93b3JrZXJzKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9w YXJ0aWFsX2JpdG1hcF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAot LSAKMi4zMS4wCgo= --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Disposition: attachment; filename="v2-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3ov2 RnJvbSA4MGJlY2M2N2IwOGU0NzFjY2VhYzg0MjZiNmY2YTFlZGY0NmYzODkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxODo0MDo0NiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg My85XSBTZXQgdXAgZm9yIGVhZ2VyIGFnZ3JlZ2F0aW9uIGJ5IGNvbGxlY3RpbmcgbmVlZGVkCiBp bmZvcwoKVGhpcyBjb21taXQgY2hlY2tzIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2Fi bGUsIGFuZCBpZiBzbywgc2V0cwp1cCByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5kIHJvb3QtPmdy b3VwX2V4cHJfbGlzdCBieSBjb2xsZWN0aW5nCnN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9u cyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgaW4gdGhlIHF1ZXJ5LgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAgfCAyNTAgKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICAgICAgfCAgIDggKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgNDEgKysrCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogOSBmaWxlcyBj aGFuZ2VkLCAzMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IGY4YTVmYmNiMGEuLjA2NzJkODQ1OGYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtNzcsNiArNzcsNyBAQCB0eXBlZGVmIGVu dW0gcHVzaGRvd25fc2FmZV90eXBlCiAKIC8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHNldCBieSBH VUMgKi8KIGJvb2wJCWVuYWJsZV9nZXFvID0gZmFsc2U7CS8qIGp1c3QgaW4gY2FzZSBHVUMgZG9l c24ndCBzZXQgaXQgKi8KK2Jvb2wJCWVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBmYWxzZTsKIGlu dAkJCWdlcW9fdGhyZXNob2xkOwogaW50CQkJbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsK IGludAkJCW1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jCmluZGV4IGQzODY4YjYyOGQuLmRiOTAzNzk2ZWMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtNzksNiArODAsOCBAQCB0eXBlZGVmIHN0cnVjdCBK b2luVHJlZUl0ZW0KIH0gSm9pblRyZWVJdGVtOwogCiAKK3N0YXRpYyB2b2lkIGNyZWF0ZV9hZ2df Y2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ncm91 cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIGV4dHJhY3Rf bGF0ZXJhbF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpicmVsLAog CQkJCQkJCQkJICAgSW5kZXggcnRpbmRleCk7CiBzdGF0aWMgTGlzdCAqZGVjb25zdHJ1Y3RfcmVj dXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqanRub2RlLApAQCAtMzI2LDYgKzMyOSwyNTMg QEAgYWRkX3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywK IAl9CiB9CiAKKy8qCisgKiBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbgorICoJICBDaGVjayBpZiBl YWdlciBhZ2dyZWdhdGlvbiBpcyBhcHBsaWNhYmxlLCBhbmQgaWYgc28gY29sbGVjdCBzdWl0YWJs ZQorICoJICBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIGlu IHRoZSBxdWVyeS4KKyAqLwordm9pZAorc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lcklu Zm8gKnJvb3QpCit7CisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiBk aXNhYmxlZCBieSB1c2VyLgorCSAqLworCWlmICghZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSkKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVy ZSBhcmUgbm8gR1JPVVAgQlkgY2xhdXNlcy4KKwkgKi8KKwlpZiAoIXJvb3QtPnBhcnNlLT5ncm91 cENsYXVzZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0byBz dXBwb3J0IGdyb3VwaW5nIHNldHMuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5ncm91cGluZ1Nl dHMpCisJCXJldHVybjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9y dCBESVNUSU5DVCBvciBPUkRFUiBCWSBhZ2dyZWdhdGVzLgorCSAqLworCWlmIChyb290LT5udW1P cmRlcmVkQWdncyA+IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBh Z2dyZWdhdGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBtb2RlLCBvciBhbnkKKwkgKiBw YXJ0aWFsIGFnZ3JlZ2F0ZXMgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZSwgZG8gbm90IGFwcGx5 IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmhhc05vblBhcnRpYWxB Z2dzIHx8IHJvb3QtPmhhc05vblNlcmlhbEFnZ3MpCisJCXJldHVybjsKKworCS8qCisJICogU1JG IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBhZ2dyZWdhdGUgYXJndW1lbnQgYW5kIHdlIGRvbid0IGV2 ZW4gd2FudCBpdAorCSAqIGluIHRoZSBHUk9VUCBCWSBjbGF1c2UsIHNvIGZvcmJpZCBpdCBpbiBn ZW5lcmFsLiBJdCBuZWVkcyB0byBiZQorCSAqIGFuYWx5emVkIGlmIGV2YWx1YXRpb24gb2YgYSBH Uk9VUCBCWSBjbGF1c2UgY29udGFpbmluZyBTUkYgYmVsb3cgdGhlCisJICogcXVlcnkgdGFyZ2V0 bGlzdCB3b3VsZCBiZSBjb3JyZWN0LiBDdXJyZW50bHkgaXQgZG9lcyBub3Qgc2VlbSB0byBiZSBh bgorCSAqIGltcG9ydGFudCB1c2UgY2FzZS4KKwkgKi8KKwlpZiAocm9vdC0+cGFyc2UtPmhhc1Rh cmdldFNSRnMpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBhZ2dyZWdhdGUgZXhwcmVz c2lvbnMgdGhhdCBhcHBlYXIgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nCisJICogY2xhdXNlcy4K KwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKKworCS8qCisJICogSWYgdGhl cmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucywgd2UgY2Fubm90IGFwcGx5 IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlz dCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBncm91cGluZyBleHByZXNz aW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzLgorCSAqLworCWNyZWF0ZV9ncm91 cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisvKgorICogQ3JlYXRlIEFnZ0NsYXVzZUluZm8g Zm9yIGVhY2ggYWdncmVnYXRlLgorICoKKyAqIElmIGFueSBhZ2dyZWdhdGUgaXMgbm90IHN1aXRh YmxlLCBzZXQgcm9vdC0+YWdnX2NsYXVzZV9saXN0IHRvIE5JTCBhbmQKKyAqIHJldHVybi4KKyAq Lworc3RhdGljIHZvaWQKK2NyZWF0ZV9hZ2dfY2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290 KQoreworCUxpc3QJICAgKnRsaXN0X2V4cHJzOworCUxpc3RDZWxsICAgKmxjOworCisJQXNzZXJ0 KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwpOworCisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zh cl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCQkJCQkgIFBWQ19J TkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBWQ19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwK KwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCisJLyoKKwkgKiBGb3Igbm93 IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IEdST1VQSU5HKCkgZXhwcmVzc2lvbnMuCisJICovCisJ Zm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikg bGZpcnN0KGxjKTsKKworCQlpZiAoSXNBKGV4cHIsIEdyb3VwaW5nRnVuYykpCisJCQlyZXR1cm47 CisJfQorCisJLyoKKwkgKiBBZ2dyZWdhdGVzIHdpdGhpbiB0aGUgSEFWSU5HIGNsYXVzZSBuZWVk IHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkKKwkgKiBhcyB0aG9zZSBpbiB0aGUgdGFy Z2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJTkcgY2FuIGNvbnRhaW4gQWdncmVmcyBidXQKKwkgKiBu b3QgV2luZG93RnVuY3MuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsICE9IE5V TEwpCisJeworCQlMaXN0CSAgICpoYXZpbmdfZXhwcnM7CisKKwkJaGF2aW5nX2V4cHJzID0gcHVs bF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJ ICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CisJCQkJCQkJCQkgICBQVkNfUkVDVVJTRV9QTEFD RUhPTERFUlMpOworCQlpZiAoaGF2aW5nX2V4cHJzICE9IE5JTCkKKwkJeworCQkJdGxpc3RfZXhw cnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9leHBycywgaGF2aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJl ZShoYXZpbmdfZXhwcnMpOworCQl9CisJfQorCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJ eworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKwkJQWdncmVmCSAgICph Z2dyZWY7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm87CisKKwkJLyoKKwkJICogdGxpc3RfZXhw cnMgbWF5IGFsc28gY29udGFpbiBWYXJzLCBidXQgd2Ugb25seSBuZWVkIEFnZ3JlZnMuCisJCSAq LworCQlpZiAoSXNBKGV4cHIsIFZhcikpCisJCQljb250aW51ZTsKKworCQlhZ2dyZWYgPSBjYXN0 Tm9kZShBZ2dyZWYsIGV4cHIpOworCisJCUFzc2VydChhZ2dyZWYtPmFnZ29yZGVyID09IE5JTCk7 CisJCUFzc2VydChhZ2dyZWYtPmFnZ2Rpc3RpbmN0ID09IE5JTCk7CisKKwkJYWNfaW5mbyA9IG1h a2VOb2RlKEFnZ0NsYXVzZUluZm8pOworCQlhY19pbmZvLT5hZ2dyZWYgPSBhZ2dyZWY7CisJCWFj X2luZm8tPmFnZ19ldmFsX2F0ID0gcHVsbF92YXJub3Mocm9vdCwgKE5vZGUgKikgYWdncmVmKTsK KworCQlyb290LT5hZ2dfY2xhdXNlX2xpc3QgPQorCQkJbGlzdF9hcHBlbmRfdW5pcXVlKHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCwgYWNfaW5mbyk7CisJfQorCisJbGlzdF9mcmVlKHRsaXN0X2V4cHJz KTsKK30KKworLyoKKyAqIENyZWF0ZSBHcm91cEV4cHJJbmZvIGZvciBlYWNoIGV4cHJlc3Npb24g dXNhYmxlIGFzIGdyb3VwaW5nIGtleS4KKyAqCisgKiBJZiBhbnkgZ3JvdXBpbmcgZXhwcmVzc2lv biBpcyBub3Qgc3VpdGFibGUsIHNldCByb290LT5ncm91cF9leHByX2xpc3QgdG8gTklMCisgKiBh bmQgcmV0dXJuLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3Mo UGxhbm5lckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJTGlzdAkgICAq c29ydGdyb3VwcmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWlsaWVzID0gTklMOwor CUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJCQkgICAqbGMzOwor CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJZm9yZWFjaChsYywg cm9vdC0+cGFyc2UtPmdyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3VwQ2xhdXNlICpzZ2MgPSBs Zmlyc3Rfbm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGdl dF9zb3J0Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJVHlw ZUNhY2hlRW50cnkgKnRjZTsKKwkJT2lkCQkJCWVxdWFsaW1hZ2Vwcm9jOworCQlPaWQJCQkJZXFf b3A7CisJCUxpc3QJCSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQkJYnRyZWVfb3BmYW1pbHk7 CisKKwkJQXNzZXJ0KHRsZS0+cmVzc29ydGdyb3VwcmVmID4gMCk7CisKKwkJLyoKKwkJICogRm9y IG5vdyB3ZSBvbmx5IHN1cHBvcnQgcGxhaW4gVmFycyBhcyBncm91cGluZyBleHByZXNzaW9ucy4K KwkJICovCisJCWlmICghSXNBKHRsZS0+ZXhwciwgVmFyKSkKKwkJCXJldHVybjsKKworCQkvKgor CQkgKiBFYWdlciBhZ2dyZWdhdGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIGVxdWFsaXR5IG9mIGdy b3VwaW5nIGtleXMKKwkJICogcGVyIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpbXBsaWVzIGJpdHdp c2UgZXF1YWxpdHkuIE90aGVyd2lzZSwgaWYKKwkJICogd2UgcHV0IGtleXMgb2YgZGlmZmVyZW50 IGJ5dGUgaW1hZ2VzIGludG8gdGhlIHNhbWUgZ3JvdXAsIHdlIGxvc2UKKwkJICogc29tZSBpbmZv cm1hdGlvbiB0aGF0IG1heSBiZSBuZWVkZWQgdG8gZXZhbHVhdGUgam9pbiBjbGF1c2VzIGFib3Zl CisJCSAqIHRoZSBwdXNoZWQtZG93biBhZ2dyZWdhdGUgbm9kZSwgb3IgdGhlIFdIRVJFIGNsYXVz ZS4KKwkJICoKKwkJICogRm9yIGV4YW1wbGUsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBub3Qg c3VwcG9ydGVkIGJlY2F1c2UgdmFsdWVzCisJCSAqIHRoYXQgZmFsbCBpbnRvIHRoZSBzYW1lIGdy b3VwIGFjY29yZGluZyB0byB0aGUgZXF1YWxpdHkgb3BlcmF0b3IKKwkJICogKGUuZy4gMCBhbmQg MC4wKSBjYW4gaGF2ZSBkaWZmZXJlbnQgc2NhbGUuCisJCSAqLworCQl0Y2UgPSBsb29rdXBfdHlw ZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIpLAorCQkJCQkJCQlUWVBFQ0FDSEVf QlRSRUVfT1BGQU1JTFkpOworCQlpZiAoIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGYpIHx8CisJ CQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKKwkJCXJldHVybjsKKworCQllcXVh bGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+YnRyZWVfb3BmLAorCQkJCQkJCQkJ CSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJICAgdGNlLT5idHJlZV9vcGludHlw ZSwKKwkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7CisJCWlmICghT2lkSXNWYWxpZChl cXVhbGltYWdlcHJvYykgfHwKKwkJCSFEYXR1bUdldEJvb2woT2lkRnVuY3Rpb25DYWxsMUNvbGwo ZXF1YWxpbWFnZXByb2MsCisJCQkJCQkJCQkJCSAgIHRjZS0+dHlwY29sbGF0aW9uLAorCQkJCQkJ CQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQlyZXR1 cm47CisKKwkJLyoKKwkJICogR2V0IHRoZSBvcGVyYXRvciBpbiB0aGUgYnRyZWUncyBvcGZhbWls eS4KKwkJICovCisJCWVxX29wID0gZ2V0X29wZmFtaWx5X21lbWJlcih0Y2UtPmJ0cmVlX29wZiwK KwkJCQkJCQkJCXRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQl0Y2UtPmJ0cmVlX29waW50 eXBlLAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKTsKKwkJaWYgKCFPaWRJc1ZhbGlk KGVxX29wKSkKKwkJCXJldHVybjsKKwkJZXFfb3BmYW1pbGllcyA9IGdldF9tZXJnZWpvaW5fb3Bm YW1pbGllcyhlcV9vcCk7CisJCWlmICghZXFfb3BmYW1pbGllcykKKwkJCXJldHVybjsKKwkJYnRy ZWVfb3BmYW1pbHkgPSBsaW5pdGlhbF9vaWQoZXFfb3BmYW1pbGllcyk7CisKKwkJZXhwcnMgPSBs YXBwZW5kKGV4cHJzLCB0bGUtPmV4cHIpOworCQlzb3J0Z3JvdXByZWZzID0gbGFwcGVuZF9pbnQo c29ydGdyb3VwcmVmcywgdGxlLT5yZXNzb3J0Z3JvdXByZWYpOworCQlidHJlZV9vcGZhbWlsaWVz ID0gbGFwcGVuZF9vaWQoYnRyZWVfb3BmYW1pbGllcywgYnRyZWVfb3BmYW1pbHkpOworCX0KKwor CS8qCisJICogQ29uc3RydWN0IEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbi4KKwkg Ki8KKwlmb3J0aHJlZShsYzEsIGV4cHJzLCBsYzIsIHNvcnRncm91cHJlZnMsIGxjMywgYnRyZWVf b3BmYW1pbGllcykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMxKTsK KwkJaW50CQkJc29ydGdyb3VwcmVmID0gbGZpcnN0X2ludChsYzIpOworCQlPaWQJCQlidHJlZV9v cGZhbWlseSA9IGxmaXJzdF9vaWQobGMzKTsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbzsKKwor CQlnZV9pbmZvID0gbWFrZU5vZGUoR3JvdXBFeHBySW5mbyk7CisJCWdlX2luZm8tPmV4cHIgPSAo RXhwciAqKSBjb3B5T2JqZWN0KGV4cHIpOworCQlnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPSBzb3J0 Z3JvdXByZWY7CisJCWdlX2luZm8tPmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVfb3BmYW1pbHk7CisK KwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gbGFwcGVuZChyb290LT5ncm91cF9leHByX2xpc3Qs IGdlX2luZm8pOworCX0KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggZWI3OGUzNzMxNy4uMTk3YTNmOTA1ZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC03Nyw2ICs3Nyw4IEBAIHF1ZXJ5 X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+cGxhY2Vob2xkZXJfbGlzdCA9IE5J TDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheSA9IE5VTEw7CiAJcm9vdC0+cGxhY2Vob2xkZXJf YXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0gTklMOworCXJvb3QtPmdy b3VwX2V4cHJfbGlzdCA9IE5JTDsKIAlyb290LT5ma2V5X2xpc3QgPSBOSUw7CiAJcm9vdC0+aW5p dGlhbF9yZWxzID0gTklMOwogCkBAIC0yNjMsNiArMjY1LDEyIEBAIHF1ZXJ5X3BsYW5uZXIoUGxh bm5lckluZm8gKnJvb3QsCiAJICovCiAJZXh0cmFjdF9yZXN0cmljdGlvbl9vcl9jbGF1c2VzKHJv b3QpOwogCisJLyoKKwkgKiBDaGVjayBpZiBlYWdlciBhZ2dyZWdhdGlvbiBpcyBhcHBsaWNhYmxl LCBhbmQgaWYgc28sIHNldCB1cAorCSAqIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCBhbmQgcm9vdC0+ Z3JvdXBfZXhwcl9saXN0LgorCSAqLworCXNldHVwX2VhZ2VyX2FnZ3JlZ2F0aW9uKHJvb3QpOwor CiAJLyoKIAkgKiBOb3cgZXhwYW5kIGFwcGVuZHJlbHMgYnkgYWRkaW5nICJvdGhlcnJlbHMiIGZv ciB0aGVpciBjaGlsZHJlbi4gIFdlCiAJICogZGVsYXkgdGhpcyB0byB0aGUgZW5kIHNvIHRoYXQg d2UgaGF2ZSBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCmluZGV4IDQ1MDEzNTgyYTcuLjk2Yzc4NTI4MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCkBAIC05MzgsNiArOTM4LDE2IEBAIHN0cnVjdCBjb25maWdfYm9v bCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCWZhbHNlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKKwl7CisJCXsiZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSIsIFBHQ19VU0VSU0VULCBRVUVSWV9U VU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGVhZ2VyIGFnZ3JlZ2F0aW9u LiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJCX0sCisJCSZlbmFibGVfZWFnZXJfYWdn cmVnYXRlLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQl7ImVuYWJs ZV9wYXJhbGxlbF9hcHBlbmQiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJ CWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5lcidzIHVzZSBvZiBwYXJhbGxlbCBhcHBl bmQgcGxhbnMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKaW5kZXggZWRjYzAyODJiMi4uMDlkODUxYjM3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDEwLDYgKzQxMCw3IEBACiAjZW5h YmxlX3NvcnQgPSBvbgogI2VuYWJsZV90aWRzY2FuID0gb24KICNlbmFibGVfZ3JvdXBfYnlfcmVv cmRlcmluZyA9IG9uCisjZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSA9IG9mZgogCiAjIC0gUGxhbm5l ciBDb3N0IENvbnN0YW50cyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggZDY3ZjcyNWFkNi4u NjllZDllYjFmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTM4Myw2ICszODMsMTIgQEAgc3Ry dWN0IFBsYW5uZXJJbmZvCiAJLyogbGlzdCBvZiBQbGFjZUhvbGRlckluZm9zICovCiAJTGlzdAkg ICAqcGxhY2Vob2xkZXJfbGlzdDsKIAorCS8qIGxpc3Qgb2YgQWdnQ2xhdXNlSW5mb3MgKi8KKwlM aXN0CSAgICphZ2dfY2xhdXNlX2xpc3Q7CisKKwkvKiBMaXN0IG9mIEdyb3VwRXhwckluZm9zICov CisJTGlzdAkgICAqZ3JvdXBfZXhwcl9saXN0OworCiAJLyogYXJyYXkgb2YgUGxhY2VIb2xkZXJJ bmZvcyBpbmRleGVkIGJ5IHBoaWQgKi8KIAlzdHJ1Y3QgUGxhY2VIb2xkZXJJbmZvICoqcGxhY2Vo b2xkZXJfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlLCBhcnJheV9zaXplKHBs YWNlaG9sZGVyX2FycmF5X3NpemUpKTsKIAkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwpA QCAtMzE5Myw2ICszMTk5LDQxIEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJh bQkgICAqcGFyYW07CiB9IE1pbk1heEFnZ0luZm87CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4 cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisg Ki8KK3R5cGVkZWYgc3RydWN0IEFnZ0NsYXVzZUluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVh ZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYg ZXhwciAqLworCUFnZ3JlZgkgICAqYWdncmVmOworCisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBl dmFsdWF0ZSB0aGlzIGFnZ3JlZ2F0ZSBhdCAqLworCVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFn Z0NsYXVzZUluZm87CisKKy8qCisgKiBUaGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBl YXIgaW4gZ3JvdXBpbmcgY2xhdXNlcworICovCit0eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZv Cit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJ CXR5cGU7CisKKwkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4 cHI7CisKKwkvKiB0aGUgdGxlU29ydEdyb3VwUmVmIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRH cm91cENsYXVzZSAqLworCUluZGV4CQlzb3J0Z3JvdXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWls eSBkZWZpbmluZyB0aGUgb3JkZXJpbmcgKi8KKwlPaWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3Jv dXBFeHBySW5mbzsKKwogLyoKICAqIEF0IHJ1bnRpbWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVz ZWQgdG8gcGFzcyB2YWx1ZXMgYXJvdW5kIGZyb20gb25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhl ci4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMg KGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCAwZThhOWM5NGJhLi4wNDBhMDQ3YjgxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaApAQCAtMjEsNiArMjEsNyBAQAogICogYWxscGF0aHMuYwogICovCiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZ2VxbzsKK2V4dGVybiBQR0RMTElNUE9SVCBi b29sIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGdlcW9f dGhyZXNob2xkOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nh bl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9z aXplOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAppbmRleCBmMmUzZmE0YzJlLi40MmUwZjM3ODU5 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtNzMsNiArNzMsNyBAQCBleHRlcm4gdm9p ZCBhZGRfb3RoZXJfcmVsc190b19xdWVyeShQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9p ZCBidWlsZF9iYXNlX3JlbF90bGlzdHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmZpbmFsX3Rs aXN0KTsKIGV4dGVybiB2b2lkIGFkZF92YXJzX3RvX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKnZhcnMsCiAJCQkJCQkJCSAgIFJlbGlkcyB3aGVyZV9uZWVkZWQpOworZXh0ZXJu IHZvaWQgc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJu IHZvaWQgZmluZF9sYXRlcmFsX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJu IHZvaWQgY3JlYXRlX2xhdGVyYWxfam9pbl9pbmZvKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVy biBMaXN0ICpkZWNvbnN0cnVjdF9qb2ludHJlZShQbGFubmVySW5mbyAqcm9vdCk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDliZTdhY2EyYjguLmE4M2E0MWIwZjgg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xMTMsNiArMTEzLDcg QEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2Ug J2VuYWJsZSUnOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCiAg ZW5hYmxlX2FzeW5jX2FwcGVuZCAgICAgICAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAg ICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgICAgICAgICB8IG9mZgog IGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmcgICAgIHwgb24KICBlbmFibGVfaGFzaGFnZyAgICAgICAgICAgICAgICAgfCBvbgpA QCAtMTM0LDcgKzEzNSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mg d2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3Rp ZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMyByb3dzKQorKDI0IHJvd3MpCiAKIC0tIFRo ZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMu CiBzZWxlY3QgdHlwZSwgY291bnQoKikgPiAwIGFzIG9rIEZST00gcGdfd2FpdF9ldmVudHMKLS0g CjIuMzEuMAoK --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Disposition: attachment; filename="v2-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3ox5 RnJvbSBhY2Q1OGIwYjUwNzdkMzgwNGEzNzVlNzRkODg1NmM2YmZkZDFhYTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAyOCBGZWIgMjAyNCAxMDowMzo0MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg Ni85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2YgYmFzZSByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbGF0aW9uIGlm IHBvc3NpYmxlLAphbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBl ZCBiYXNlIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRo cy5jIHwgIDkxICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgIHwgMTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwg MTk2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRl eCA2MzNiNWIwYWYxLi5iMjFmMjE1ODlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMKQEAgLTkzLDYgKzkzLDcgQEAgam9pbl9zZWFyY2hfaG9va190eXBlIGpvaW5fc2VhcmNo X2hvb2sgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfY29uc2lkZXJfc3RhcnR1 cChQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxh bm5lckluZm8gKnJvb3QpOworc3RhdGljIHZvaWQgc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMoUGxh bm5lckluZm8gKnJvb3QpOwogc3RhdGljIHZvaWQgc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cyhQbGFu bmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfcmVsX3NpemUoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCSBJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0 ZSk7CkBAIC0xMTcsNiArMTE4LDcgQEAgc3RhdGljIHZvaWQgc2V0X2FwcGVuZF9yZWxfc2l6ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQlJbmRleCBydGksIFJh bmdlVGJsRW50cnkgKnJ0ZSk7CiBzdGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJSW5kZXggcnRpLCBS YW5nZVRibEVudHJ5ICpydGUpOworc3RhdGljIHZvaWQgc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIHZvaWQgZ2VuZXJh dGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQkJCSBMaXN0ICpsaXZlX2NoaWxkcmVscywKIAkJCQkJCQkJCQkgTGlzdCAqYWxs X2NoaWxkX3BhdGhrZXlzKTsKQEAgLTE4NSw2ICsxODcsMTEgQEAgbWFrZV9vbmVfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKIAkgKi8KIAlzZXRfYmFzZV9yZWxfc2l6ZXMo cm9vdCk7CiAKKwkvKgorCSAqIEJ1aWxkIGdyb3VwZWQgYmFzZSByZWxhdGlvbnMgZm9yIGVhY2gg YmFzZSByZWwgaWYgcG9zc2libGUuCisJICovCisJc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMocm9v dCk7CisKIAkvKgogCSAqIFdlIHNob3VsZCBub3cgaGF2ZSBzaXplIGVzdGltYXRlcyBmb3IgZXZl cnkgYWN0dWFsIHRhYmxlIGludm9sdmVkIGluCiAJICogdGhlIHF1ZXJ5LCBhbmQgd2UgYWxzbyBr bm93IHdoaWNoIGlmIGFueSBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZQpAQCAtMzI2LDYgKzMz Myw1OSBAQCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJfQogfQogCisv KgorICogc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMKKyAqCSAgRm9yIGVhY2ggInBsYWluIiBiYXNl IHJlbGF0aW9uIGJ1aWxkIGEgZ3JvdXBlZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFn Z3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFuZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdy b3VwZWQgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQ bGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBh cmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdl cgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdn X2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQor CQlyZXR1cm47CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ug aWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgcmVscyBpbgorCSAqIHRoZSBxdWVyeS4KKwkgKi8K KwlpZiAoYm1zX21lbWJlcnNoaXAocm9vdC0+YWxsX2Jhc2VyZWxzKSAhPSBCTVNfTVVMVElQTEUp CisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJh eV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8JICAgKnJlbCA9IHJvb3QtPnNpbXBsZV9y ZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3VwZWQ7CisJCVJlbEFnZ0lu Zm8JICAgKmFnZ19pbmZvOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNw b25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQorCQkJY29u dGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsgLyogc2FuaXR5IGNoZWNrIG9u IGFycmF5ICovCisKKwkJLyoKKwkJICogSWdub3JlIFJURXMgdGhhdCBhcmUgbm90IHNpbXBsZSBy ZWxzLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIKKwkJICogIm90aGVyIHJlbHMiIGhl cmUuCisJCSAqLworCQlpZiAoIUlTX1NJTVBMRV9SRUwocmVsKSkKKwkJCWNvbnRpbnVlOworCisJ CXJlbF9ncm91cGVkID0gYnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+cmVsaWQs ICZhZ2dfaW5mbyk7CisJCWlmIChyZWxfZ3JvdXBlZCkKKwkJeworCQkJLyogTWFrZSB0aGUgZ3Jv dXBlZCByZWxhdGlvbiBhdmFpbGFibGUgZm9yIGpvaW5pbmcuICovCisJCQlhZGRfZ3JvdXBlZF9y ZWwocm9vdCwgcmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwkJfQorCX0KK30KKwogLyoKICAqIHNl dF9iYXNlX3JlbF9wYXRobGlzdHMKICAqCSAgRmluZHMgYWxsIHBhdGhzIGF2YWlsYWJsZSBmb3Ig c2Nhbm5pbmcgZWFjaCBiYXNlLXJlbGF0aW9uIGVudHJ5LgpAQCAtNTYyLDYgKzYyMiwxNSBAQCBz ZXRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJLyog Tm93IGZpbmQgdGhlIGNoZWFwZXN0IG9mIHRoZSBwYXRocyBmb3IgdGhpcyByZWwgKi8KIAlzZXRf Y2hlYXBlc3QocmVsKTsKIAorCS8qCisJICogSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGlz IHJlbCBleGlzdHMsIGJ1aWxkIHBhcnRpYWwgYWdncmVnYXRpb24KKwkgKiBwYXRocyBmb3IgaXQu CisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgd2UndmUgY2Fs bGVkIHNldF9jaGVhcGVzdCgpIGZvcgorCSAqIHRoaXMgYmFzZSByZWwsIGJlY2F1c2Ugd2UgbmVl ZCBpdHMgY2hlYXBlc3QgcGF0aHMuCisJICovCisJc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0KHJv b3QsIHJlbCk7CisKICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAlwcHJpbnQocmVsKTsKICNlbmRp ZgpAQCAtMTI4OSw2ICsxMzU4LDI4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwocm9v dCwgcmVsLCBsaXZlX2NoaWxkcmVscyk7CiB9CiAKKy8qCisgKiBzZXRfZ3JvdXBlZF9yZWxfcGF0 aGxpc3QKKyAqCSAgSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGUgZ2l2ZW4gJ3JlbCcgZXhp c3RzLCBidWlsZCBwYXJ0aWFsCisgKgkgIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciBpdC4KKyAqLwor c3RhdGljIHZvaWQKK3NldF9ncm91cGVkX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsKQoreworCVJlbE9wdEluZm8gICAqcmVsX2dyb3VwZWQ7CisJUmVsQWdn SW5mbyAgICphZ2dfaW5mbzsKKworCS8qIEFkZCBwYXRocyB0byB0aGUgZ3JvdXBlZCBiYXNlIHJl bGF0aW9uIGlmIG9uZSBleGlzdHMuICovCisJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVs KHJvb3QsIHJlbC0+cmVsaWRzLAorCQkJCQkJCQkgICAmYWdnX2luZm8pOworCWlmIChyZWxfZ3Jv dXBlZCkKKwl7CisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIHJl bCwKKwkJCQkJCQkgICBhZ2dfaW5mbyk7CisJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJ fQorfQorCiAKIC8qCiAgKiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jCmluZGV4IGU3ZjQ2NWVmN2IuLjgzY2RiYjM4YmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxp bWl0cy5oPgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL2FwcGVuZGluZm8uaCIKQEAgLTI3LDEyICsyOCwxNSBAQAogI2luY2x1ZGUgIm9wdGlt aXplci9wYXRocy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFjZWhvbGRlci5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3RsaXN0LmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNsdWRlICJw YXJzZXIvcGFyc2Vfb3Blci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgog I2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK KyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIC8qCkBAIC00MTEsNiArNDE1LDEwMyBA QCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdElu Zm8gKnBhcmVudCkKIAlyZXR1cm4gcmVsOwogfQogCisvKgorICogYnVpbGRfc2ltcGxlX2dyb3Vw ZWRfcmVsCisgKgkgIENvbnN0cnVjdCBhIG5ldyBSZWxPcHRJbmZvIGZvciBhIGdyb3VwZWQgYmFz ZSByZWxhdGlvbiBvdXQgb2YgYW4gZXhpc3RpbmcKKyAqCSAgbm9uLWdyb3VwZWQgYmFzZSByZWxh dGlvbi4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgbmV3IFJlbE9wdEluZm8gaXMgcmV0dXJuZWQg YW5kIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8KKyAqIGlzIHN0b3JlZCBpbiAqYWdnX2lu Zm9fcC4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCSBSZWxBZ2dJbmZvICoqYWdnX2luZm9fcCkK K3sKKwlSZWxPcHRJbmZvCSAgICpyZWxfcGxhaW47CisJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3Vw ZWQ7CisJUmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisKKwkvKgorCSAqIFdlIHNob3VsZCBoYXZl IGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25z LAorCSAqIG90aGVyd2lzZSB3ZSBjYW5ub3QgcmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQocm9v dC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlz dCAhPSBOSUwpOworCisJcmVsX3BsYWluID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF07 CisJQXNzZXJ0KHJlbF9wbGFpbiAhPSBOVUxMKTsKKwlBc3NlcnQoSVNfU0lNUExFX1JFTChyZWxf cGxhaW4pKTsKKworCS8qIG5vdGhpbmcgdG8gZG8gZm9yIGR1bW15IHJlbCAqLworCWlmIChJU19E VU1NWV9SRUwocmVsX3BsYWluKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gY3JlYXRlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMg YmFzZQorCSAqIHJlbGF0aW9uLgorCSAqLworCWFnZ19pbmZvID0gY3JlYXRlX3JlbF9hZ2dfaW5m byhyb290LCByZWxfcGxhaW4pOworCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0 aW9uICovCisJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91cGVkX3JlbChyb290LCByZWxfcGxhaW4p OworCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCXJlbF9ncm91 cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93czsKKworCS8qIHJldHVybiB0aGUgUmVs QWdnSW5mbyBzdHJ1Y3R1cmUgKi8KKwkqYWdnX2luZm9fcCA9IGFnZ19pbmZvOworCisJcmV0dXJu IHJlbF9ncm91cGVkOworfQorCisvKgorICogYnVpbGRfZ3JvdXBlZF9yZWwKKyAqCSAgQnVpbGQg YSBncm91cGVkIHJlbGF0aW9uIGJ5IGZsYXQgY29weWluZyBhIHBsYWluIHJlbGF0aW9uIGFuZCBy ZXNldHRpbmcKKyAqCSAgdGhlIG5lY2Vzc2FyeSBmaWVsZHMuCisgKi8KK1JlbE9wdEluZm8gKgor YnVpbGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9wbGFp bikKK3sKKwlSZWxPcHRJbmZvICAgKnJlbF9ncm91cGVkOworCisJcmVsX2dyb3VwZWQgPSBtYWtl Tm9kZShSZWxPcHRJbmZvKTsKKwltZW1jcHkocmVsX2dyb3VwZWQsIHJlbF9wbGFpbiwgc2l6ZW9m KFJlbE9wdEluZm8pKTsKKworCS8qCisJICogY2xlYXIgcGF0aCBpbmZvCisJICovCisJcmVsX2dy b3VwZWQtPnBhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5wcGlsaXN0ID0gTklMOworCXJl bF9ncm91cGVkLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5jaGVhcGVz dF9zdGFydHVwX3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF90b3RhbF9wYXRo ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxMOworCXJl bF9ncm91cGVkLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOworCisJLyoKKwkg KiBjbGVhciBwYXJ0aXRpb24gaW5mbworCSAqLworCXJlbF9ncm91cGVkLT5wYXJ0X3NjaGVtZSA9 IE5VTEw7CisJcmVsX2dyb3VwZWQtPm5wYXJ0cyA9IC0xOworCXJlbF9ncm91cGVkLT5ib3VuZGlu Zm8gPSBOVUxMOworCXJlbF9ncm91cGVkLT5wYXJ0Ym91bmRzX21lcmdlZCA9IGZhbHNlOworCXJl bF9ncm91cGVkLT5wYXJ0aXRpb25fcXVhbCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+cGFydF9yZWxz ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CisJcmVsX2dyb3VwZWQt PmFsbF9wYXJ0cmVscyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPnBhcnRleHBycyA9IE5VTEw7CisJ cmVsX2dyb3VwZWQtPm51bGxhYmxlX3BhcnRleHBycyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNv bnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOworCisJLyoKKwkgKiBjbGVhciBzaXpl IGVzdGltYXRlcworCSAqLworCXJlbF9ncm91cGVkLT5yb3dzID0gMDsKKworCXJldHVybiByZWxf Z3JvdXBlZDsKK30KKwogLyoKICAqIGZpbmRfYmFzZV9yZWwKICAqCSAgRmluZCBhIGJhc2Ugb3Ig b3RoZXJyZWwgcmVsYXRpb24gZW50cnksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdC4KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKaW5kZXggOGQwM2NlMmM1Ny4uNmI4NTZhNWU3NyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKQEAgLTMwNiw2ICszMDYsMTAgQEAgZXh0ZXJuIHZvaWQgc2V0dXBf c2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhwYW5k X3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJu IFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxp ZCwKIAkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAqYnVp bGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJ CQkJCQkJCVJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWls ZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpy ZWxfcGxhaW4pOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2Vy cihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5k X2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwotLSAK Mi4zMS4wCgo= --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0009-Add-README.patch" Content-Disposition: attachment; filename="v2-0009-Add-README.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3p08 RnJvbSAxOTM3MTMyNmY1M2UyZTcxNjBmODkzMGFmOWZiYTY2NGNlN2U3ZDk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzo0MTozNiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg OS85XSBBZGQgUkVBRE1FCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgfCA4OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA4OCBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRSBi L3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggMmFiNGYzZGJmMy4uZGFlN2I4N2Yz MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQorKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsOTEgQEAgYnJlYWtpbmcgZG93 biBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9uZWQgcmVsYXRpb24gaW50 bwogYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0aW9ucyBpcyBjYWxsZWQg cGFydGl0aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdoZW4gdGhlIHBhcnRpdGlv biBrZXlzIG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNhbiBiZSBzaWduaWZpY2Fu dGx5IGZhc3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFnZXIgYWdncmVnYXRpb24K Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9idmlvdXMgd2F5IHRvIGV2YWx1YXRlIGFnZ3Jl Z2F0ZXMgaXMgdG8gZXZhbHVhdGUgdGhlIEZST00gY2xhdXNlIG9mIHRoZQorU1FMIHF1ZXJ5ICh0 aGlzIGlzIHdoYXQgcXVlcnlfcGxhbm5lciBkb2VzKSBhbmQgdXNlIHRoZSByZXN1bHRpbmcgcGF0 aHMgYXMgdGhlCitpbnB1dCBvZiBBZ2cgbm9kZS4gSG93ZXZlciwgaWYgdGhlIGdyb3VwcyBhcmUg bGFyZ2UgZW5vdWdoLCBpdCBtYXkgYmUgbW9yZQorZWZmaWNpZW50IHRvIGFwcGx5IHRoZSBwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIHRvIHRoZSBvdXRwdXQgb2YgYmFzZSByZWxhdGlvbgorc2NhbiwgYW5k IGZpbmFsaXplIGl0IHdoZW4gd2UgaGF2ZSBhbGwgcmVsYXRpb25zIG9mIHRoZSBxdWVyeSBqb2lu ZWQ6CisKKyBFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIGEuaSwgYXZnKGIueSkKKyBGUk9N IGEgSk9JTiBiIE9OIGEuaSA9IGIuagorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5q CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBhX3BrZXkgb24gYQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkg PSBiLmopCisKK1RodXMgdGhlIGpvaW4gYWJvdmUgdGhlIHBhcnRpYWwgYWdncmVnYXRlIG5vZGUg cmVjZWl2ZXMgZmV3ZXIgaW5wdXQgcm93cywgYW5kCitzbyB0aGUgbnVtYmVyIG9mIG91dGVyLXRv LWlubmVyIHBhaXJzIG9mIHR1cGxlcyB0byBiZSBjaGVja2VkIGNhbiBiZQorc2lnbmlmaWNhbnRs eSBsb3dlciwgd2hpY2ggY2FuIGluIHR1cm4gbGVhZCB0byBjb25zaWRlcmFibHkgbG93ZXIgam9p biBjb3N0LgorCitOb3RlIHRoYXQgdGhlIEdST1VQIEJZIGV4cHJlc3Npb24gbWlnaHQgbm90IGJl IHVzZWZ1bCBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0ZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUs IHRoZSBhZ2dyZWdhdGUgYXZnKGIueSkgcmVmZXJlbmNlcyB0YWJsZSAiYiIsCitidXQgdGhlIEdS T1VQIEJZIGV4cHJlc3Npb24gbWVudGlvbnMgImEiLiBIb3dldmVyLCB0aGUgZXF1aXZhbGVuY2Ug Y2xhc3Mge2EuaSwKK2Iuan0gYWxsb3dzIHVzIHRvIHVzZSB0aGUgYi5qIGNvbHVtbiBhcyBhIGdy b3VwaW5nIGtleSBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0aW9uIG9mIHRoZSAiYiIgdGFibGUu IFRoZSBlcXVpdmFsZW5jZSBjbGFzcyBtZWNoYW5pc20gaXMgc3VpdGFibGUKK2JlY2F1c2UgaXQn cyBkZXNpZ25lZCB0byBkZXJpdmUgam9pbiBjbGF1c2VzLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0 aGUgam9pbgorY2xhdXNlcyBkZXRlcm1pbmUgdGhlIGNob2ljZSBvZiBncm91cGluZyBjb2x1bW5z IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZTogdGhlCitvbmx5IHdheSBmb3IgdGhlIHBhcnRpYWwg YWdncmVnYXRlIHRvIHByb3ZpZGUgdXBwZXIgam9pbihzKSB3aXRoIGlucHV0IHZhbHVlcworaXMg dG8gaGF2ZSB0aGUgam9pbiBpbnB1dCBleHByZXNzaW9uKHMpIGluIHRoZSBncm91cGluZyBrZXk7 IGJlc2lkZXMgZ3JvdXBpbmcKK2NvbHVtbnMsIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZSBjYW4gb25s eSBwcm9kdWNlIHRoZSB0cmFuc2llbnQgc3RhdGVzIG9mIHRoZQorYWdncmVnYXRlIGZ1bmN0aW9u cywgYnV0IGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZmVyZW5jZWQgYnkgdGhlIEpP SU4KK2NsYXVzZXMuCisKK1JlZ2FyZGluZyBjb3JyZWN0bmVzcywgam9pbiBub2RlIGNvbnNpZGVy cyB0aGUgb3V0cHV0IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZQordG8gYmUgZXF1aXZhbGVudCB0 byB0aGUgb3V0cHV0IG9mIGEgcGxhaW4gKG5vbi1hZ2dyZWdhdGVkKSByZWxhdGlvbiBzY2FuLiBU aGF0CitpcywgYSBncm91cCAoaS5lLiBhIHJvdyBvZiB0aGUgcGFydGlhbCBhZ2dyZWdhdGUgb3V0 cHV0KSBtYXRjaGVzIHRoZSBvdGhlcgorc2lkZSBvZiB0aGUgam9pbiBpZiBhbmQgb25seSBpZiBl YWNoIHJvdyBvZiB0aGUgbm9uLWFnZ3JlZ2F0ZSByZWxhdGlvbgorZG9lcy4gSW4gb3RoZXIgd29y ZHMsIGFsbCByb3dzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBncm91cCBoYXZlIHRoZSBzYW1lIHZh bHVlCitvZiB0aGUgam9pbiBjb2x1bW5zIChBcyBtZW50aW9uZWQgYWJvdmUsIGEgam9pbiBjYW5u b3QgcmVmZXJlbmNlIG90aGVyIG91dHB1dAorZXhwcmVzc2lvbnMgb2YgdGhlIHBhcnRpYWwgYWdn cmVnYXRlIHRoYW4gdGhlIGdyb3VwaW5nIGV4cHJlc3Npb25zLikuCisKK0hvd2V2ZXIsIHRoZXJl J3MgYSByZXN0cmljdGlvbiBmcm9tIHRoZSBhZ2dyZWdhdGUncyBwZXJzcGVjdGl2ZTogdGhlIGFn Z3JlZ2F0ZQorY2Fubm90IGJlIHB1c2hlZCBkb3duIGlmIGFueSBjb2x1bW4gcmVmZXJlbmNlZCBi eSBlaXRoZXIgZ3JvdXBpbmcgZXhwcmVzc2lvbgorb3IgYWdncmVnYXRlIGZ1bmN0aW9uIGNhbiBi ZSBzZXQgdG8gTlVMTCBieSBhbiBvdXRlciBqb2luIGFib3ZlIHRoZSByZWxhdGlvbgordG8gd2hp Y2ggd2Ugd2FudCB0byBhcHBseSB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbi4gVGhlIHBvaW50IGlz IHRoYXQgdGhvc2UKK05VTEwgdmFsdWVzIHdvdWxkIG5vdCBhcHBlYXIgb24gdGhlIGlucHV0IG9m IHRoZSBwdXNoZWQtZG93biwgc28gaXQgY291bGQKK2VpdGhlciBwdXQgdGhlIHJvd3MgaW50byBn cm91cHMgaW4gYSBkaWZmZXJlbnQgd2F5IHRoYW4gdGhlIGFnZ3JlZ2F0ZSBhdCB0aGUKK3RvcCBv ZiB0aGUgcGxhbiwgb3IgaXQgY291bGQgY29tcHV0ZSB3cm9uZyB2YWx1ZXMgb2YgdGhlIGFnZ3Jl Z2F0ZSBmdW5jdGlvbnMuCisKK0Jlc2lkZXMgYmFzZSByZWxhdGlvbiwgdGhlIGFnZ3JlZ2F0aW9u IGNhbiBhbHNvIGJlIHB1c2hlZCBkb3duIHRvIGpvaW46CisKKyBFWFBMQUlOIChDT1NUUyBPRkYp CisgU0VMRUNUIGEuaSwgYXZnKGIueSArIGMueikKKyBGUk9NIGEgSk9JTiBiIE9OIGEuaSA9IGIu agorICAgICAgICBKT0lOIGMgT04gYi5qID0gYy5pCisgR1JPVVAgQlkgYS5pOworCisgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBhLmkKKyAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAg S2V5OiBiLmoKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKGIuaiA9IGMuaSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBiCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGMKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgYV9wa2V5IG9uIGEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5q KQorCitXaGV0aGVyIHRoZSBBZ2cgbm9kZSBpcyBjcmVhdGVkIG91dCBvZiBiYXNlIHJlbGF0aW9u IG9yIG91dCBvZiBqb2luLCBpdCdzCithZGRlZCB0byBhIHNlcGFyYXRlIFJlbE9wdEluZm8gdGhh dCB3ZSBjYWxsICJncm91cGVkIHJlbGF0aW9uIi4gR3JvdXBlZAorcmVsYXRpb24gY2FuIGJlIGpv aW5lZCB0byBhIG5vbi1ncm91cGVkIHJlbGF0aW9uLCB3aGljaCByZXN1bHRzIGluIGEgZ3JvdXBl ZAorcmVsYXRpb24gdG9vLiBKb2luIG9mIHR3byBncm91cGVkIHJlbGF0aW9ucyBkb2VzIG5vdCBz ZWVtIHRvIGJlIHZlcnkgdXNlZnVsCithbmQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisK K0lmIHF1ZXJ5X3BsYW5uZXIgcHJvZHVjZXMgYSBncm91cGVkIHJlbGF0aW9uIHRoYXQgY29udGFp bnMgdmFsaWQgcGF0aHMsIHRoZXNlCithcmUgc2ltcGx5IGFkZGVkIHRvIHRoZSBVUFBFUlJFTF9Q QVJUSUFMX0dST1VQX0FHRyByZWxhdGlvbi4gRnVydGhlcgorcHJvY2Vzc2luZyBvZiB0aGVzZSBw YXRocyB0aGVuIGRvZXMgbm90IGRpZmZlciBmcm9tIHByb2Nlc3Npbmcgb2Ygb3RoZXIKK3BhcnRp YWxseSBncm91cGVkIHBhdGhzLgotLSAKMi4zMS4wCgo= --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Disposition: attachment; filename="v2-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3oy6 RnJvbSA0NzFlM2I5MDQ0ZWI2Yjg2M2RlNzEyODU1OGZjMmJmMzZiYTFiZTIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzozMzowOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg Ny85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2Ygam9pbiByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBqdXN0LXByb2Nlc3NlZCBq b2luCnJlbGF0aW9uIGlmIHBvc3NpYmxlLCBhbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhz IGZvciB0aGUgZ3JvdXBlZApqb2luIHJlbGF0aW9ucy4KClRoZSBjaGFuZ2VzIG1hZGUgdG8gbWFr ZV9qb2luX3JlbCgpIGFyZSByZWxhdGl2ZWx5IG1pbm9yLCB3aXRoIHRoZQphZGRpdGlvbiBvZiBh IG5ldyBmdW5jdGlvbiBtYWtlX2dyb3VwZWRfam9pbl9yZWwoKSwgd2hpY2ggZmluZHMgb3IKY3Jl YXRlcyBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSBqdXN0LXByb2Nlc3NlZCBqb2lucmVsLCBh bmQgZ2VuZXJhdGVzCmdyb3VwZWQgcGF0aHMgYnkgam9pbmluZyBhIGdyb3VwZWQgaW5wdXQgcmVs YXRpb24gd2l0aCBhIG5vbi1ncm91cGVkCmlucHV0IHJlbGF0aW9uLgoKVGhlIG90aGVyIHdheSB0 byBnZW5lcmF0ZSBncm91cGVkIHBhdGhzIGlzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhhc2hlZApw YXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgam9pbnJlbC4g IFRoaXMgb2NjdXJzCmluIHN0YW5kYXJkX2pvaW5fc2VhcmNoKCksIGFmdGVyIHdlJ3ZlIHJ1biBz ZXRfY2hlYXBlc3QoKSBmb3IgdGhlCmpvaW5yZWwuICBUaGUgcmVhc29uIGZvciBwZXJmb3JtaW5n IHRoaXMgc3RlcCBhZnRlciBzZXRfY2hlYXBlc3QoKSBpcwp0aGF0IHdlIG5lZWQgdG8ga25vdyB0 aGUgam9pbnJlbCdzIGNoZWFwZXN0IHBhdGhzIChzZWUKZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocygp KS4KClRoaXMgcGF0Y2ggYWxzbyBtYWtlcyB0aGUgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIHRv cG1vc3Qgam9pbiByZWwgYWN0CmFzIHRoZSB1cHBlciByZWwgcmVwcmVzZW50aW5nIHRoZSByZXN1 bHQgb2YgcGFydGlhbCBhZ2dyZWdhdGlvbiwgc28gdGhhdAp3ZSBjYW4gYWRkIHRoZSBmaW5hbCBh Z2dyZWdhdGlvbiBvbiB0b3Agb2YgdGhhdC4gIEFkZGl0aW9uYWxseSwgdGhpcwpwYXRjaCBleHRl bmRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uIHRvIHdvcmsgd2l0aApw YXJ0aXRpb253aXNlIGpvaW4gYW5kIGdlcW8uCgpUaGlzIHBhdGNoIGFsc28gbWFrZXMgZWFnZXIg YWdncmVnYXRpb24gd29yayB3aXRoIG91dGVyIGpvaW5zLiAgV2l0aApvdXRlciBqb2lucywgdGhl IGFnZ3JlZ2F0ZSBjYW5ub3QgYmUgcHVzaGVkIGRvd24gaWYgYW55IGNvbHVtbgpyZWZlcmVuY2Vk IGJ5IGdyb3VwaW5nIGV4cHJlc3Npb25zIG9yIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgaXMgbnVsbGFi bGUgYnkKYW4gb3V0ZXIgam9pbiBhYm92ZSB0aGUgcmVsYXRpb24gdG8gd2hpY2ggd2Ugd2FudCB0 byBhcHBseSB0aGUgcGFydGlhbAphZ2dyZWdhdGlvbi4gIFRoYW5rcyB0byBUb20ncyBvdXRlci1q b2luLWF3YXJlLVZhciBpbmZyYXN0cnVjdHVyZSwgd2UKY2FuIGVhc2lseSBpZGVudGlmeSBzdWNo IHNpdHVhdGlvbnMgYW5kIHN1YnNlcXVlbnRseSByZWZyYWluIGZyb20KcHVzaGluZyBkb3duIHRo ZSBhZ2dyZWdhdGVzLgoKU3RhcnRpbmcgZnJvbSB0aGlzIHBhdGNoLCB5b3Ugc2hvdWxkIGJlIGFi bGUgdG8gc2VlIHBsYW5zIHdpdGggZWFnZXIKYWdncmVnYXRpb24uCi0tLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgIHwgIDg0ICsrKysrKysrKysrKystLS0tCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgNDggKysrKysrKysrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyAgIHwgMTE1ICsrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDM1 ICsrKysrKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgfCAgNjQg KysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzMjAgaW5zZXJ0aW9ucygrKSwgMjYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19l dmFsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwppbmRleCAxMTQx MTU2ODk5Li4yNzg4NTdkNzY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vx by9nZXFvX2V2YWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwu YwpAQCAtNjAsOCArNjAsMTIgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0 b3VyLCBpbnQgbnVtX2dlbmUpCiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJUmVsT3B0SW5mbyAq am9pbnJlbDsKIAlDb3N0CQlmaXRuZXNzOwotCWludAkJCXNhdmVsZW5ndGg7Ci0Jc3RydWN0IEhU QUIgKnNhdmVoYXNoOworCWludAkJCXNhdmVsZW5ndGhfam9pbl9yZWw7CisJc3RydWN0IEhUQUIg KnNhdmVoYXNoX2pvaW5fcmVsOworCWludAkJCXNhdmVsZW5ndGhfZ3JvdXBlZF9yZWw7CisJc3Ry dWN0IEhUQUIgKnNhdmVoYXNoX2dyb3VwZWRfcmVsOworCWludAkJCXNhdmVsZW5ndGhfZ3JvdXBl ZF9pbmZvOworCXN0cnVjdCBIVEFCICpzYXZlaGFzaF9ncm91cGVkX2luZm87CiAKIAkvKgogCSAq IENyZWF0ZSBhIHByaXZhdGUgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIGhvbGQgYWxsIHRlbXAg c3RvcmFnZQpAQCAtNzgsMjUgKzgyLDM4IEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwg R2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhteWNvbnRleHQpOwogCiAJLyoKLQkgKiBnaW1tZV90cmVlIHdpbGwgYWRkIGVudHJpZXMgdG8g cm9vdC0+am9pbl9yZWxfbGlzdCwgd2hpY2ggbWF5IG9yIG1heQotCSAqIG5vdCBhbHJlYWR5IGNv bnRhaW4gc29tZSBlbnRyaWVzLiAgVGhlIG5ld2x5IGFkZGVkIGVudHJpZXMgd2lsbCBiZQotCSAq IHJlY3ljbGVkIGJ5IHRoZSBNZW1vcnlDb250ZXh0RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVu c3VyZSB0aGF0IHRoZQotCSAqIGxpc3QgaXMgcmVzdG9yZWQgdG8gaXRzIGZvcm1lciBzdGF0ZSBi ZWZvcmUgZXhpdGluZy4gIFdlIGNhbiBkbyB0aGlzIGJ5Ci0JICogdHJ1bmNhdGluZyB0aGUgbGlz dCB0byBpdHMgb3JpZ2luYWwgbGVuZ3RoLiAgTk9URSB0aGlzIGFzc3VtZXMgdGhhdCBhbnkKLQkg KiBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kIQorCSAqIGdpbW1lX3RyZWUg d2lsbCBhZGQgZW50cmllcyB0byByb290LT5qb2luX3JlbF9saXN0LCByb290LT5hZ2dfaW5mb19s aXN0CisJICogYW5kIHJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0dd LCB3aGljaCBtYXkgb3IgbWF5IG5vdAorCSAqIGFscmVhZHkgY29udGFpbiBzb21lIGVudHJpZXMu ICBUaGUgbmV3bHkgYWRkZWQgZW50cmllcyB3aWxsIGJlIHJlY3ljbGVkCisJICogYnkgdGhlIE1l bW9yeUNvbnRleHREZWxldGUgYmVsb3csIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgZWFjaCBsaXN0 IG9mCisJICogdGhlIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMgaXMgcmVzdG9yZWQgdG8gaXRzIGZv cm1lciBzdGF0ZSBiZWZvcmUKKwkgKiBleGl0aW5nLiAgV2UgY2FuIGRvIHRoaXMgYnkgdHJ1bmNh dGluZyBlYWNoIGxpc3QgdG8gaXRzIG9yaWdpbmFsIGxlbmd0aC4KKwkgKiBOT1RFIHRoaXMgYXNz dW1lcyB0aGF0IGFueSBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kIQogCSAq Ci0JICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8gbWVzcyB1cCB0aGUgb3V0ZXIgam9p bl9yZWxfbGlzdC0+aGFzaCwgaWYKLQkgKiB0aGVyZSBpcyBvbmUuICBXZSBjYW4gZG8gdGhpcyBi eSBqdXN0IHRlbXBvcmFyaWx5IHNldHRpbmcgdGhlIGxpbmsgdG8KLQkgKiBOVUxMLiAgKElmIHdl IGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywgd2hpY2ggd2UgdmVyeSBsaWtlbHkK LQkgKiBhcmUsIGEgbmV3IGhhc2ggdGFibGUgd2lsbCBnZXQgYnVpbHQgYW5kIHVzZWQgbG9jYWxs eS4pCisJICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8gbWVzcyB1cCB0aGUgb3V0ZXIg aGFzaCB0YWJsZXMgb2YgdGhlCisJICogUmVsSW5mb0xpc3Qgc3RydWN0dXJlcywgaWYgYW55LiAg V2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseQorCSAqIHNldHRpbmcgZWFjaCBsaW5r IHRvIE5VTEwuICAoSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBlbm91Z2ggam9pbiByZWxzLAorCSAq IHdoaWNoIHdlIHZlcnkgbGlrZWx5IGFyZSwgbmV3IGhhc2ggdGFibGVzIHdpbGwgZ2V0IGJ1aWx0 IGFuZCB1c2VkCisJICogbG9jYWxseS4pCiAJICoKIAkgKiBqb2luX3JlbF9sZXZlbFtdIHNob3Vs ZG4ndCBiZSBpbiB1c2UsIHNvIGp1c3QgQXNzZXJ0IGl0IGlzbid0LgogCSAqLwotCXNhdmVsZW5n dGggPSBsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyk7Ci0Jc2F2ZWhhc2gg PSByb290LT5qb2luX3JlbF9saXN0LT5oYXNoOworCXNhdmVsZW5ndGhfam9pbl9yZWwgPSBsaXN0 X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyk7CisJc2F2ZWhhc2hfam9pbl9yZWwg PSByb290LT5qb2luX3JlbF9saXN0LT5oYXNoOworCisJc2F2ZWxlbmd0aF9ncm91cGVkX3JlbCA9 CisJCWxpc3RfbGVuZ3RoKHJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9B R0ddLml0ZW1zKTsKKwlzYXZlaGFzaF9ncm91cGVkX3JlbCA9CisJCXJvb3QtPnVwcGVyX3JlbHNb VVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLmhhc2g7CisKKwlzYXZlbGVuZ3RoX2dyb3VwZWRf aW5mbyA9IGxpc3RfbGVuZ3RoKHJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zKTsKKwlzYXZlaGFz aF9ncm91cGVkX2luZm8gPSByb290LT5hZ2dfaW5mb19saXN0LT5oYXNoOworCiAJQXNzZXJ0KHJv b3QtPmpvaW5fcmVsX2xldmVsID09IE5VTEwpOwogCiAJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFz aCA9IE5VTEw7CisJcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10u aGFzaCA9IE5VTEw7CisJcm9vdC0+YWdnX2luZm9fbGlzdC0+aGFzaCA9IE5VTEw7CiAKIAkvKiBj b25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHJlbGF0 aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVlKHJvb3QsIHRvdXIsIG51bV9nZW5lKTsKQEAg LTExOCwxMiArMTM1LDIyIEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91 ciwgaW50IG51bV9nZW5lKQogCQlmaXRuZXNzID0gREJMX01BWDsKIAogCS8qCi0JICogUmVzdG9y ZSBqb2luX3JlbF9saXN0IHRvIGl0cyBmb3JtZXIgc3RhdGUsIGFuZCBwdXQgYmFjayBvcmlnaW5h bAotCSAqIGhhc2h0YWJsZSBpZiBhbnkuCisJICogUmVzdG9yZSBlYWNoIG9mIHRoZSBsaXN0IGlu IGpvaW5fcmVsX2xpc3QsIGFnZ19pbmZvX2xpc3QgYW5kCisJICogdXBwZXJfcmVsc1tVUFBFUlJF TF9QQVJUSUFMX0dST1VQX0FHR10gdG8gaXRzIGZvcm1lciBzdGF0ZSwgYW5kIHB1dCBiYWNrCisJ ICogb3JpZ2luYWwgaGFzaHRhYmxlIGlmIGFueS4KIAkgKi8KIAlyb290LT5qb2luX3JlbF9saXN0 LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMsCi0JCQkJ CQkJCQkJCSAgIHNhdmVsZW5ndGgpOwotCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBzYXZl aGFzaDsKKwkJCQkJCQkJCQkJICAgc2F2ZWxlbmd0aF9qb2luX3JlbCk7CisJcm9vdC0+am9pbl9y ZWxfbGlzdC0+aGFzaCA9IHNhdmVoYXNoX2pvaW5fcmVsOworCisJcm9vdC0+dXBwZXJfcmVsc1tV UFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10uaXRlbXMgPQorCQlsaXN0X3RydW5jYXRlKHJvb3Qt PnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLml0ZW1zLAorCQkJCQkgIHNh dmVsZW5ndGhfZ3JvdXBlZF9yZWwpOworCXJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElB TF9HUk9VUF9BR0ddLmhhc2ggPSBzYXZlaGFzaF9ncm91cGVkX3JlbDsKKworCXJvb3QtPmFnZ19p bmZvX2xpc3QtPml0ZW1zID0gbGlzdF90cnVuY2F0ZShyb290LT5hZ2dfaW5mb19saXN0LT5pdGVt cywKKwkJCQkJCQkJCQkJICAgc2F2ZWxlbmd0aF9ncm91cGVkX2luZm8pOworCXJvb3QtPmFnZ19p bmZvX2xpc3QtPmhhc2ggPSBzYXZlaGFzaF9ncm91cGVkX2luZm87CiAKIAkvKiByZWxlYXNlIGFs bCB0aGUgbWVtb3J5IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN4dCk7CkBAIC0yNzksNiArMzA2LDI3IEBAIG1lcmdlX2NsdW1wKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpjbHVtcHMsIENsdW1wICpuZXdfY2x1bXAsIGludCBudW1fZ2Vu ZSwKIAkJCQkvKiBGaW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVzdCBwYXRocyBmb3IgdGhpcyBqb2lu cmVsICovCiAJCQkJc2V0X2NoZWFwZXN0KGpvaW5yZWwpOwogCisJCQkJLyoKKwkJCQkgKiBFeGNl cHQgZm9yIHRoZSB0b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcKKwkJ CQkgKiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBv biB0b3Agb2YgdGhlCisJCQkJICogcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdy ZSBkb25lIGNyZWF0aW5nIHBhdGhzIGZvcgorCQkJCSAqIHRoZSBncm91cGVkIHJlbGF0aW9uLCBz byBydW4gc2V0X2NoZWFwZXN0KCkuCisJCQkJICovCisJCQkJaWYgKCFibXNfZXF1YWwoam9pbnJl bC0+cmVsaWRzLCByb290LT5hbGxfcXVlcnlfcmVscykpCisJCQkJeworCQkJCQlSZWxPcHRJbmZv ICAgKnJlbF9ncm91cGVkOworCQkJCQlSZWxBZ2dJbmZvICAgKmFnZ19pbmZvOworCisJCQkJCXJl bF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBqb2lucmVsLT5yZWxpZHMsCisJCQkJ CQkJCQkJCQkgICAmYWdnX2luZm8pOworCQkJCQlpZiAocmVsX2dyb3VwZWQpCisJCQkJCXsKKwkJ CQkJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIGpvaW5yZWwsCisJ CQkJCQkJCQkJCSAgIGFnZ19pbmZvKTsKKwkJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7 CisJCQkJCX0KKwkJCQl9CisKIAkJCQkvKiBBYnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJ CQkJb2xkX2NsdW1wLT5qb2lucmVsID0gam9pbnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0g bmV3X2NsdW1wLT5zaXplOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXgg YjIxZjIxNTg5YS4uNjhhZTdlZjQ3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRo cy5jCkBAIC0zODYxLDYgKzM4NjEsMTAgQEAgc3RhbmRhcmRfam9pbl9zZWFyY2goUGxhbm5lcklu Zm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLCBMaXN0ICppbml0aWFsX3JlbHMpCiAJCSAqCiAJ CSAqIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMgZm9yIHRoZSBqb2lucmVs LCBzbyBydW4KIAkJICogc2V0X2NoZWFwZXN0KCkuCisJCSAqCisJCSAqIEluIGFkZGl0aW9uLCB3 ZSBhbHNvIHJ1biBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKCkgZm9yIHRoZSBncm91cGVkCisJCSAq IHJlbGF0aW9uIG9mIGVhY2gganVzdC1wcm9jZXNzZWQgam9pbnJlbCwgYW5kIHJ1biBzZXRfY2hl YXBlc3QoKSBmb3IKKwkJICogdGhlIGdyb3VwZWQgcmVsYXRpb24gYWZ0ZXJ3YXJkcy4KIAkJICov CiAJCWZvcmVhY2gobGMsIHJvb3QtPmpvaW5fcmVsX2xldmVsW2xldl0pCiAJCXsKQEAgLTM4ODEs NiArMzg4NSwyNyBAQCBzdGFuZGFyZF9qb2luX3NlYXJjaChQbGFubmVySW5mbyAqcm9vdCwgaW50 IGxldmVsc19uZWVkZWQsIExpc3QgKmluaXRpYWxfcmVscykKIAkJCS8qIEZpbmQgYW5kIHNhdmUg dGhlIGNoZWFwZXN0IHBhdGhzIGZvciB0aGlzIHJlbCAqLwogCQkJc2V0X2NoZWFwZXN0KHJlbCk7 CiAKKwkJCS8qCisJCQkgKiBFeGNlcHQgZm9yIHRoZSB0b3Btb3N0IHNjYW4vam9pbiByZWwsIGNv bnNpZGVyIGdlbmVyYXRpbmcKKwkJCSAqIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRo ZSBncm91cGVkIHJlbGF0aW9uIG9uIHRvcCBvZiB0aGUKKwkJCSAqIHBhdGhzIG9mIHRoaXMgcmVs LiAgQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocyBmb3IKKwkJCSAqIHRoZSBn cm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2NoZWFwZXN0KCkuCisJCQkgKi8KKwkJCWlmICgh Ym1zX2VxdWFsKHJlbC0+cmVsaWRzLCByb290LT5hbGxfcXVlcnlfcmVscykpCisJCQl7CisJCQkJ UmVsT3B0SW5mbyAgICpyZWxfZ3JvdXBlZDsKKwkJCQlSZWxBZ2dJbmZvICAgKmFnZ19pbmZvOwor CisJCQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+cmVsaWRzLAor CQkJCQkJCQkJCQkgICAmYWdnX2luZm8pOworCQkJCWlmIChyZWxfZ3JvdXBlZCkKKwkJCQl7CisJ CQkJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIHJlbCwKKwkJCQkJ CQkJCQkgICBhZ2dfaW5mbyk7CisJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJCQkJ fQorCQkJfQorCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAJCQlwcHJpbnQocmVsKTsKICNlbmRp ZgpAQCAtNDc0OSw2ICs0Nzc0LDI5IEBAIGdlbmVyYXRlX3BhcnRpdGlvbndpc2Vfam9pbl9wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCQlpZiAoSVNfRFVNTVlfUkVM KGNoaWxkX3JlbCkpCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBFeGNlcHQgZm9yIHRoZSB0 b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcgcGFydGlhbAorCQkgKiBh Z2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mIHRoZSBw YXRocyBvZgorCQkgKiB0aGlzIHBhcnRpdGlvbmVkIGNoaWxkLWpvaW4uICBBZnRlciB0aGF0LCB3 ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCSAqIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiwg c28gcnVuIHNldF9jaGVhcGVzdCgpLgorCQkgKi8KKwkJaWYgKCFibXNfZXF1YWwoSVNfT1RIRVJf UkVMKHJlbCkgPworCQkJCQkgICByZWwtPnRvcF9wYXJlbnRfcmVsaWRzIDogcmVsLT5yZWxpZHMs CisJCQkJCSAgIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkKKwkJeworCQkJUmVsT3B0SW5mbyAgICpy ZWxfZ3JvdXBlZDsKKwkJCVJlbEFnZ0luZm8gICAqYWdnX2luZm87CisKKwkJCXJlbF9ncm91cGVk ID0gZmluZF9ncm91cGVkX3JlbChyb290LCBjaGlsZF9yZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkg ICAmYWdnX2luZm8pOworCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJeworCQkJCWdlbmVyYXRlX2dy b3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIGNoaWxkX3JlbCwKKwkJCQkJCQkJCSAgIGFn Z19pbmZvKTsKKwkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCQkJfQorCQl9CisKICNp ZmRlZiBPUFRJTUlaRVJfREVCVUcKIAkJcHByaW50KGNoaWxkX3JlbCk7CiAjZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IDQ3NTA1NzliMGEuLmE5ZWYwODE1OTcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTYsMTEgKzE2LDEzIEBA CiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5m by5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2pv aW5pbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAK IAogc3RhdGljIHZvaWQgbWFrZV9yZWxzX2J5X2NsYXVzZV9qb2lucyhQbGFubmVySW5mbyAqcm9v dCwKQEAgLTM1LDYgKzM3LDkgQEAgc3RhdGljIGJvb2wgaGFzX2xlZ2FsX2pvaW5jbGF1c2UoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgYm9vbCByZXN0cmljdGlv bl9pc19jb25zdGFudF9mYWxzZShMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJICBSZWxP cHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJCSAgYm9vbCBvbmx5X3B1c2hlZF9kb3duKTsKK3N0 YXRpYyB2b2lkIG1ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsMSwKKwkJCQkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpqb2lu cmVsLAorCQkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxp c3QpOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIsIFJl bE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExp c3QgKnJlc3RyaWN0bGlzdCk7CkBAIC03NTMsNiArNzU4LDEwIEBAIG1ha2Vfam9pbl9yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIpCiAJCXJl dHVybiBqb2lucmVsOwogCX0KIAorCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZv ciAnam9pbnJlbCcgaWYgcG9zc2libGUuICovCisJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJvb3Qs IHJlbDEsIHJlbDIsIGpvaW5yZWwsIHNqaW5mbywKKwkJCQkJCSAgcmVzdHJpY3RsaXN0KTsKKwog CS8qIEFkZCBwYXRocyB0byB0aGUgam9pbiByZWxhdGlvbi4gKi8KIAlwb3B1bGF0ZV9qb2lucmVs X3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAogCQkJCQkJCQly ZXN0cmljdGxpc3QpOwpAQCAtODY0LDYgKzg3MywxMDcgQEAgYWRkX291dGVyX2pvaW5zX3RvX3Jl bGlkcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIGlucHV0X3JlbGlkcywKIAlyZXR1cm4gaW5w dXRfcmVsaWRzOwogfQogCisvKgorICogbWFrZV9ncm91cGVkX2pvaW5fcmVsCisgKgkgIEJ1aWxk IGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIG91dCBvZiAnam9pbnJlbCcgaWYgZWFnZXIgYWdncmVn YXRpb24gaXMKKyAqCSAgcG9zc2libGUgYW5kIHRoZSAnam9pbnJlbCcgY2FuIHByb2R1Y2UgZ3Jv dXBlZCBwYXRocy4KKyAqCisgKiBXZSBhbHNvIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24g cGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIGJ5CisgKiBqb2luaW5nIHRoZSBncm91cGVk IHBhdGhzIG9mICdyZWwxJyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3JlbDInLCBvciBieQorICog am9pbmluZyB0aGUgZ3JvdXBlZCBwYXRocyBvZiAncmVsMicgdG8gdGhlIHBsYWluIHBhdGhzIG9m ICdyZWwxJy4KKyAqLworc3RhdGljIHZvaWQKK21ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwKKwkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0 ICpyZXN0cmljdGxpc3QpCit7CisJUmVsaWRzCQkJam9pbnJlbGlkczsKKwlSZWxPcHRJbmZvCSAg ICpyZWxfZ3JvdXBlZDsKKwlSZWxBZ2dJbmZvCSAgICphZ2dfaW5mbyA9IE5VTEw7CisJUmVsT3B0 SW5mbwkgICAqcmVsMV9ncm91cGVkOworCVJlbE9wdEluZm8JICAgKnJlbDJfZ3JvdXBlZDsKKwor CS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBvciBncm91cGlu ZyBleHByZXNzaW9ucywgZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbiBpcyBub3QgcG9zc2libGUuCisJ ICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwgfHwKKwkJcm9vdC0+Z3JvdXBf ZXhwcl9saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJam9pbnJlbGlkcyA9IGJtc191bmlvbihy ZWwxLT5yZWxpZHMsIHJlbDItPnJlbGlkcyk7CisJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRf cmVsKHJvb3QsIGpvaW5yZWxpZHMsICZhZ2dfaW5mbyk7CisKKwkvKgorCSAqIENvbnN0cnVjdCBh IG5ldyBSZWxPcHRJbmZvIGZvciB0aGUgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGlmIHRoZXJlIGlz IG5vCisJICogZXhpc3Rpbmcgb25lLgorCSAqLworCWlmIChyZWxfZ3JvdXBlZCA9PSBOVUxMKQor CXsKKwkJLyoKKwkJICogUHJlcGFyZSB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBjcmVhdGUg Z3JvdXBlZCBwYXRocyBmb3IgdGhpcworCQkgKiBqb2luIHJlbGF0aW9uLgorCQkgKi8KKwkJYWdn X2luZm8gPSBjcmVhdGVfcmVsX2FnZ19pbmZvKHJvb3QsIGpvaW5yZWwpOworCQlpZiAoYWdnX2lu Zm8gPT0gTlVMTCkKKwkJCXJldHVybjsKKworCQkvKiBidWlsZCBhIGdyb3VwZWQgcmVsYXRpb24g b3V0IG9mIHRoZSBwbGFpbiByZWxhdGlvbiAqLworCQlyZWxfZ3JvdXBlZCA9IGJ1aWxkX2dyb3Vw ZWRfcmVsKHJvb3QsIGpvaW5yZWwpOworCQlyZWxfZ3JvdXBlZC0+cmVsdGFyZ2V0ID0gYWdnX2lu Zm8tPnRhcmdldDsKKwkJcmVsX2dyb3VwZWQtPnJvd3MgPSBhZ2dfaW5mby0+Z3JvdXBlZF9yb3dz OworCisJCS8qCisJCSAqIE1ha2UgdGhlIGdyb3VwZWQgcmVsYXRpb24gYXZhaWxhYmxlIGZvciBm dXJ0aGVyIGpvaW5pbmcgb3IgZm9yCisJCSAqIGFjdGluZyBhcyB0aGUgdXBwZXIgcmVsIHJlcHJl c2VudGluZyB0aGUgcmVzdWx0IG9mIHBhcnRpYWwKKwkJICogYWdncmVnYXRpb24uCisJCSAqLwor CQlhZGRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwl9CisKKwlB c3NlcnQoYWdnX2luZm8gIT0gTlVMTCk7CisKKwkvKiByZXRyaWV2ZSB0aGUgZ3JvdXBlZCByZWxh dGlvbnMgZm9yIHRoZSB0d28gaW5wdXQgcmVscyAqLworCXJlbDFfZ3JvdXBlZCA9IGZpbmRfZ3Jv dXBlZF9yZWwocm9vdCwgcmVsMS0+cmVsaWRzLCBOVUxMKTsKKwlyZWwyX2dyb3VwZWQgPSBmaW5k X2dyb3VwZWRfcmVsKHJvb3QsIHJlbDItPnJlbGlkcywgTlVMTCk7CisKKwkvKiB3ZSBzaG91bGQg bm90IHNlZSBkdW1teSBncm91cGVkIHJlbGF0aW9uICovCisJQXNzZXJ0KHJlbDFfZ3JvdXBlZCA9 PSBOVUxMIHx8ICFJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJQXNzZXJ0KHJlbDJfZ3Jv dXBlZCA9PSBOVUxMIHx8ICFJU19EVU1NWV9SRUwocmVsMl9ncm91cGVkKSk7CisKKwkvKiBOb3Ro aW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gZ3JvdXBlZCByZWxhdGlvbi4gKi8KKwlpZiAocmVsMV9n cm91cGVkID09IE5VTEwgJiYKKwkJcmVsMl9ncm91cGVkID09IE5VTEwpCisJCXJldHVybjsKKwor CS8qCisJICogSm9pbiBvZiB0d28gZ3JvdXBlZCByZWxhdGlvbnMgaXMgY3VycmVudGx5IG5vdCBz dXBwb3J0ZWQuICBJbiBzdWNoIGEKKwkgKiBjYXNlLCBncm91cGluZyBvZiBvbmUgc2lkZSB3b3Vs ZCBjaGFuZ2UgdGhlIG9jY3VycmVuY2Ugb2YgdGhlIG90aGVyCisJICogc2lkZSdzIGFnZ3JlZ2F0 ZSB0cmFuc2llbnQgc3RhdGVzIG9uIHRoZSBpbnB1dCBvZiB0aGUgZmluYWwgYWdncmVnYXRpb24u CisJICogVGhpcyBjYW4gYmUgaGFuZGxlZCBieSBhZGp1c3RpbmcgdGhlIHRyYW5zaWVudCBzdGF0 ZXMsIGJ1dCBpdCdzIG5vdAorCSAqIHdvcnRoIHRoZSBlZmZvcnQgZm9yIG5vdy4KKwkgKi8KKwlp ZiAocmVsMV9ncm91cGVkICE9IE5VTEwgJiYKKwkJcmVsMl9ncm91cGVkICE9IE5VTEwpCisJCXJl dHVybjsKKworCS8qIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBn cm91cGVkIHJlbGF0aW9uICovCisJaWYgKHJlbDFfZ3JvdXBlZCAhPSBOVUxMKQorCXsKKwkJc2V0 X2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgcmVsX2dyb3VwZWQsIHJlbDFfZ3JvdXBlZCwg cmVsMiwKKwkJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworCQlwb3B1bGF0ZV9qb2lu cmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMV9ncm91cGVkLCByZWwyLCByZWxfZ3JvdXBlZCwKKwkJ CQkJCQkJCXNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwl9CisJZWxzZSBpZiAocmVsMl9ncm91cGVk ICE9IE5VTEwpCisJeworCQlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRlcyhyb290LCByZWxfZ3Jv dXBlZCwgcmVsMSwgcmVsMl9ncm91cGVkLAorCQkJCQkJCQkgICBzamluZm8sIHJlc3RyaWN0bGlz dCk7CisJCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCByZWwxLCByZWwyX2dyb3Vw ZWQsIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJc2ppbmZvLCByZXN0cmljdGxpc3QpOworCX0KK30K KwogLyoKICAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocwogICoJICBBZGQgcGF0aHMgdG8g dGhlIGdpdmVuIGpvaW5yZWwgZm9yIGdpdmVuIHBhaXIgb2Ygam9pbmluZyByZWxhdGlvbnMuIFRo ZQpAQCAtMTY1Myw2ICsxNzYzLDExIEBAIHRyeV9wYXJ0aXRpb253aXNlX2pvaW4oUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkJCQkgYWRq dXN0X2NoaWxkX3JlbGlkcyhqb2lucmVsLT5yZWxpZHMsCiAJCQkJCQkJCQkJCSBuYXBwaW5mb3Ms IGFwcGluZm9zKSkpOwogCisJCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZvciAn Y2hpbGRfam9pbnJlbCcgaWYgcG9zc2libGUgKi8KKwkJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJv b3QsIGNoaWxkX3JlbDEsIGNoaWxkX3JlbDIsCisJCQkJCQkJICBjaGlsZF9qb2lucmVsLCBjaGls ZF9zamluZm8sCisJCQkJCQkJICBjaGlsZF9yZXN0cmljdGxpc3QpOworCiAJCS8qIEFuZCBtYWtl IHBhdGhzIGZvciB0aGUgY2hpbGQgam9pbiAqLwogCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0 aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVsMiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWws IGNoaWxkX3NqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBhYzk3 NTc1NDUzLi44MjQ0MTM0ZmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC0zOTM5LDEwICszOTM5LDE2IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCiAJLyogR2F0aGVyIGFueSBw YXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlmIChwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQotCXsKIAkJ Z2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9ncm91cGVkX3JlbCk7CisKKwkv KgorCSAqIE5vdyBjaG9vc2UgdGhlIGJlc3QgcGF0aChzKSBmb3IgcGFydGlhbGx5X2dyb3VwZWRf cmVsLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBub24tcGFydGlhbCBwYXRocyBjYW4gY29tZSBl aXRoZXIgZnJvbSB0aGUgR2F0aGVyIGFib3ZlIG9yCisJICogZnJvbSBlYWdlciBhZ2dyZWdhdGlv bi4KKwkgKi8KKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIHBhcnRpYWxseV9ncm91cGVk X3JlbC0+cGF0aGxpc3QpCiAJCXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwot CX0KIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KQEAgLTcwMzYsNiArNzA0 MiwxMyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwK IAlib29sCQljYW5faGFzaCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gp ICE9IDA7CiAJYm9vbAkJY2FuX3NvcnQgPSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VT RV9TT1JUKSAhPSAwOwogCisJLyoKKwkgKiBUaGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxk IGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0ZWQgZHVlIHRvIGVhZ2VyCisJICogYWdncmVnYXRpb24u CisJICovCisJcGFydGlhbGx5X2dyb3VwZWRfcmVsID0gZmluZF9ncm91cGVkX3JlbChyb290LCBp bnB1dF9yZWwtPnJlbGlkcywgTlVMTCk7CisJQXNzZXJ0KGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUg fHwgcGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpOworCiAJLyoKIAkgKiBDb25zaWRlciB3 aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24tcGFydGlh bAogCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9uLXBhcnRp YWwgcGF0aCwgYW5kIG9ubHkgaWYKQEAgLTcwNTksMTkgKzcwNzIsMjUgQEAgY3JlYXRlX3BhcnRp YWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogSWYgd2UgY2FuJ3QgcGFy dGlhbGx5IGFnZ3JlZ2F0ZSBwYXJ0aWFsIHBhdGhzLCBhbmQgd2UgY2FuJ3QgcGFydGlhbGx5CiAJ ICogYWdncmVnYXRlIG5vbi1wYXJ0aWFsIHBhdGhzLCB0aGVuIGRvbid0IGJvdGhlciBjcmVhdGlu ZyB0aGUgbmV3CiAJICogUmVsT3B0SW5mbyBhdCBhbGwsIHVubGVzcyB0aGUgY2FsbGVyIHNwZWNp ZmllZCBmb3JjZV9yZWxfY3JlYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHBhcnRpYWxs eV9ncm91cGVkX3JlbCBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIGFuZAorCSAqIHBv cHVsYXRlZCB3aXRoIGFwcHJvcHJpYXRlIHBhdGhzIGJ5IGVhZ2VyIGFnZ3JlZ2F0aW9uLgogCSAq LwogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwgJiYKIAkJY2hlYXBlc3RfcGFydGlh bF9wYXRoID09IE5VTEwgJiYKIAkJIWZvcmNlX3JlbF9jcmVhdGlvbikKLQkJcmV0dXJuIE5VTEw7 CisJCXJldHVybiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWw7CiAKIAkvKgogCSAqIEJ1aWxkIGEgbmV3 IHVwcGVyIHJlbGF0aW9uIHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHBhcnRpYWxseQotCSAq IGFnZ3JlZ2F0aW5nIHRoZSByb3dzIGZyb20gdGhlIGlucHV0IHJlbGF0aW9uLgotCSAqLwotCXBh cnRpYWxseV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAotCQkJCQkJCQkJCQlV UFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHRywKLQkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJlbGlk cyk7CisJICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uICBU aGUgcmVsYXRpb24gbWF5IGFscmVhZHkKKwkgKiBleGlzdCBkdWUgdG8gZWFnZXIgYWdncmVnYXRp b24sIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUKKwkgKiBpdC4KKwkgKi8K KwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpCisJCXBhcnRpYWxseV9ncm91cGVk X3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAorCQkJCQkJCQkJCQkJVVBQRVJSRUxfUEFSVElB TF9HUk9VUF9BR0csCisJCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNp ZGVyX3BhcmFsbGVsOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3Vw ZWRfcmVsLT5yZWxvcHRraW5kOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvYXBwZW5kaW5mby5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5j CmluZGV4IDZiYTRlYmEyMjQuLmIzYTI4NDIxNGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2FwcGVuZGluZm8uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9hcHBlbmRpbmZvLmMKQEAgLTQ5NSw2ICs0OTUsNzAgQEAgYWRqdXN0X2FwcGVuZHJlbF9hdHRy c19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOwogCX0KIAor CS8qCisJICogV2UgaGF2ZSB0byBwcm9jZXNzIFJlbEFnZ0luZm8gbm9kZXMgc3BlY2lhbGx5Lgor CSAqLworCWlmIChJc0Eobm9kZSwgUmVsQWdnSW5mbykpCisJeworCQlSZWxBZ2dJbmZvICpvbGRp bmZvID0gKFJlbEFnZ0luZm8gKikgbm9kZTsKKwkJUmVsQWdnSW5mbyAqbmV3aW5mbyA9IG1ha2VO b2RlKFJlbEFnZ0luZm8pOworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICov CisJCW1lbWNweShuZXdpbmZvLCBvbGRpbmZvLCBzaXplb2YoUmVsQWdnSW5mbykpOworCisJCW5l d2luZm8tPnJlbGlkcyA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5mby0+cmVsaWRzLAorCQkJ CQkJCQkJCQkgIGNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJICBjb250ZXh0LT5hcHBp bmZvcyk7CisKKwkJbmV3aW5mby0+dGFyZ2V0ID0gKFBhdGhUYXJnZXQgKikKKwkJCWFkanVzdF9h cHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT50YXJnZXQsCisJCQkJCQkJ CQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+YWdnX2lucHV0ID0gKFBhdGhUYXJnZXQgKikK KwkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5hZ2df aW5wdXQsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+Z3JvdXBfY2xhdXNl cyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikg b2xkaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdp bmZvLT5ncm91cF9leHBycyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+Z3JvdXBfZXhwcnMsCisJCQkJCQkJCQkJICAgY29udGV4 dCk7CisKKwkJbmV3aW5mby0+YWdnX2V4cHJzID0gKExpc3QgKikKKwkJCWFkanVzdF9hcHBlbmRy ZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5hZ2dfZXhwcnMsCisJCQkJCQkJCQkJ ICAgY29udGV4dCk7CisKKwkJcmV0dXJuIChOb2RlICopIG5ld2luZm87CisJfQorCisJLyoKKwkg KiBXZSBoYXZlIHRvIHByb2Nlc3MgUGF0aFRhcmdldCBub2RlcyBzcGVjaWFsbHkuCisJICovCisJ aWYgKElzQShub2RlLCBQYXRoVGFyZ2V0KSkKKwl7CisJCVBhdGhUYXJnZXQgKm9sZHRhcmdldCA9 IChQYXRoVGFyZ2V0ICopIG5vZGU7CisJCVBhdGhUYXJnZXQgKm5ld3RhcmdldCA9IG1ha2VOb2Rl KFBhdGhUYXJnZXQpOworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICovCisJ CW1lbWNweShuZXd0YXJnZXQsIG9sZHRhcmdldCwgc2l6ZW9mKFBhdGhUYXJnZXQpKTsKKworCQlp ZiAob2xkdGFyZ2V0LT5zb3J0Z3JvdXByZWZzKQorCQl7CisJCQlTaXplCW5ieXRlcyA9IGxpc3Rf bGVuZ3RoKG9sZHRhcmdldC0+ZXhwcnMpICogc2l6ZW9mKEluZGV4KTsKKworCQkJbmV3dGFyZ2V0 LT5leHBycyA9IChMaXN0ICopCisJCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChO b2RlICopIG9sZHRhcmdldC0+ZXhwcnMsCisJCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCQlu ZXd0YXJnZXQtPnNvcnRncm91cHJlZnMgPSAoSW5kZXggKikgcGFsbG9jKG5ieXRlcyk7CisJCQlt ZW1jcHkobmV3dGFyZ2V0LT5zb3J0Z3JvdXByZWZzLCBvbGR0YXJnZXQtPnNvcnRncm91cHJlZnMs IG5ieXRlcyk7CisJCX0KKworCQlyZXR1cm4gKE5vZGUgKikgbmV3dGFyZ2V0OworCX0KKwogCS8q CiAJICogTk9URTogd2UgZG8gbm90IG5lZWQgdG8gcmVjdXJzZSBpbnRvIHN1YmxpbmtzLCBiZWNh dXNlIHRoZXkgc2hvdWxkCiAJICogYWxyZWFkeSBoYXZlIGJlZW4gY29udmVydGVkIHRvIHN1YnBs YW5zIGJlZm9yZSB3ZSBzZWUgdGhlbS4KLS0gCjIuMzEuMAoK --000000000000dda6300612e43798 Content-Type: application/octet-stream; name="v2-0008-Add-test-cases.patch" Content-Disposition: attachment; filename="v2-0008-Add-test-cases.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lte0c3oz7 RnJvbSA2ZDhlZTBmZWU4NDg2MGVmYjNiYTMwOTExYjZmODdjMWNlMjc1Njg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzo0MToyMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg OC85XSBBZGQgdGVzdCBjYXNlcwoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2Vy X2FnZ3JlZ2F0ZS5vdXQgfCAxMjcwICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsICAgICAgfCAgMjA1ICsrKwogMyBmaWxlcyBjaGFuZ2Vk LCAxNDc2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsCgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJkN2RlYzhhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKQEAgLTAsMCArMSwx MjcwIEBACistLQorLS0gRUFHRVIgQUdHUkVHQVRJT04KKy0tIFRlc3Qgd2UgY2FuIHB1c2ggYWdn cmVnYXRpb24gZG93biBiZWxvdyBqb2luCistLQorLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9u LCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdh dGUgVE8gb247CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91 YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQs IGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwg YiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDEgU0VM RUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8g ZWFnZXJfYWdnX3QyIFNFTEVDVCBpLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MyBTRUxFQ1QgaSUxMCwgaSUxMCwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdl ciBhZ2dyZWdhdGlvbiBvdmVyIGJhc2UgcmVsCistLQorLS0gUGVyZm9ybSBzY2FuIG9mIGEgdGFi bGUsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0g YW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhh c2ggYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvbjsKK1NFVCBlbmFibGVfc29y dCBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZn KHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAg ICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5i LCB0MS5jCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAo UEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMp CisgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxNSByb3dzKQorCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgNiB8IDUwMQorIDcgfCA1MDIKKyAzIHwgNDk4CisgNCB8IDQ5 OQorIDkgfCA1MDQKKyA1IHwgNTAwCisgOCB8IDUwMworKDkgcm93cykKKworLS0gUHJvZHVjZSBy ZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9m ZjsKK1NFVCBlbmFibGVfc29ydCBUTyBvbjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9h Z2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEu YSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBP dXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5h CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQ QVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5i KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJ QUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBh dmcodDIuYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIKKygyMSByb3dzKQorCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUw MQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkgcm93cykKKworU0VUIGVuYWJsZV9o YXNoYWdnIFRPIGRlZmF1bHQ7CitTRVQgZW5hYmxlX3NvcnQgVE8gZGVmYXVsdDsKKy0tCistLSBU ZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCistLSBQZXJmb3JtIGpvaW4g b2YgdGFibGVzLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFi bGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCistLSBQcm9kdWNlIHJlc3VsdHMg d2l0aCBoYXNoIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb247CitTRVQgZW5h YmxlX3NvcnQgVE8gb2ZmOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEg R1JPVVAgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5jKSkKKyAg IEdyb3VwIEtleTogdDEuYQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgT3V0cHV0OiB0MS5h LCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICBIYXNoIENvbmQ6ICh0MS5i ID0gdDIuYikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQx CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2ZygodDIuYyArIHQz LmMpKSkKKyAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkKKyAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0 My5jLCB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5hID0g dDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyMiByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQy LmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0 MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0 MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5OQorIDYgfCA1MDcK KyA3IHwgNTA5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA5IHwgNTEzCisgNSB8IDUwNQorIDggfCA1 MTEKKyg5IHJvd3MpCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRp b24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitTRVQgZW5hYmxlX3NvcnQgVE8gb247CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5j KSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBG aW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5j KSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEu YSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgU29ydCBLZXk6IHQxLmEK KyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBB UlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEu YiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5i LCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0My5jLCB0 Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0My5jLCB0Mi5iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5hID0gdDIu YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyOCByb3dzKQorCitTRUxFQ1Qg dDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2Fn Z190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMu YSBHUk9VUCBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5 OQorIDMgfCA1MDEKKyA0IHwgNTAzCisgNSB8IDUwNQorIDYgfCA1MDcKKyA3IHwgNTA5CisgOCB8 IDUxMQorIDkgfCA1MTMKKyg5IHJvd3MpCisKK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBkZWZhdWx0 OworU0VUIGVuYWJsZV9zb3J0IFRPIGRlZmF1bHQ7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFn Z3JlZ2F0aW9uIHdvcmtzIGZvciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9u IGNhbiBiZSBwdXNoZWQgZG93biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My5hLCBhdmcodDMuYykgRlJPTSBlYWdlcl9hZ2df dDEgdDEgUklHSFQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9IHQzLmIgR1JPVVAgQlkg dDMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMu YSwgYXZnKHQzLmMpCisgICBHcm91cCBLZXk6IHQzLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBP dXRwdXQ6IHQzLmEsIChQQVJUSUFMIGF2Zyh0My5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0My5h CisgICAgICAgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDMu YSwgKFBBUlRJQUwgYXZnKHQzLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYiA9 IHQxLmIpCisgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIFBBUlRJQUwgYXZnKHQzLmMpCisgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzLmEsIHQzLmIKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKygxOCByb3dzKQorCitTRUxFQ1QgdDMuYSwg YXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QzIHQz IE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDAg fCA1MDUKKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAor IDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQKKygxMCByb3dzKQorCistLSBF bnN1cmUgYWdncmVnYXRpb24gY2Fubm90IGJlIHB1c2hlZCBkb3duIHRvIHRoZSBudWxsYWJsZSBz aWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9 IHQzLmIgR1JPVVAgQlkgdDMuYTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0My5hLCBhdmco dDMuYykKKyAgIEdyb3VwIEtleTogdDMuYQorICAgLT4gIEhhc2ggUmlnaHQgSm9pbgorICAgICAg ICAgT3V0cHV0OiB0My5hLCB0My5jCisgICAgICAgICBIYXNoIENvbmQ6ICh0My5iID0gdDEuYikK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIK KygxMiByb3dzKQorCitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQx IExFRlQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9IHQzLmIgR1JPVVAgQlkgdDMuYTsK KyBhIHwgYXZnIAorLS0tKy0tLS0tCisgOCB8IDUwMworICAgfCAgICAKKyA5IHwgNTA0CisgNyB8 IDUwMgorIDEgfCA0OTYKKyA1IHwgNTAwCisgNCB8IDQ5OQorIDIgfCA0OTcKKyA2IHwgNTAxCisg MyB8IDQ5OAorKDEwIHJvd3MpCisKKy0tCistLSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24g d29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCistLQorU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q9MDsK K1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0PTA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5f c2l6ZT0wOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI9NDsKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9h Z2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEu YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBH cm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJU SUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgR2F0 aGVyCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAg ICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElB TCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIu YikKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEs IHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmco dDIuYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworKDIxIHJvd3MpCisKK1NFTEVDVCB0MS5h LCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5 NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8 IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1 cF9jb3N0OworUkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90 YWJsZV9zY2FuX3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwor RFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1Ag VEFCTEUgZWFnZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBh cnRpdGlvbndpc2Ugam9pbgorLS0KKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwg d2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9h Z2dyZWdhdGUgVE8gdHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5 IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0 cnVlOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9O IEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBP RiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxV RVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFS VElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFO R0UoeSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2Vy X2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiMl9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9N ICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJ TlRPIGVhZ2VyX2FnZ190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3Nl cmllcygwLCAyOTksIDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAl IDIwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBl YWdlcl9hZ2dfdGFiMTsKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZ IGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBw YXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3Vt KHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0 MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54OworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBGaW5hbGl6ZSBI YXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSh0MS55KSwgY291bnQoKikK KyAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFSVElBTCBjb3Vu dCgqKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLnkgPSB0MS54KQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0MgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgUEFSVElBTCBz dW0odDEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MS54LCB0MS55CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSh0MV8xLnkpLCBjb3VudCgqKQorICAgICAgICAg R3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMiB0Ml8xCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngs IFBBUlRJQUwgc3VtKHQxXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCB0MV8xLnkKKyAgIC0+ICBGaW5h bGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQxXzIueSks IGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLnkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkg PSB0MV8yLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWIyX3AzIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55CisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi55KSwgUEFSVElBTCBjb3VudCgq KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFf cDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IHQxXzIueQorKDQ2IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZS T00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55 IEdST1VQIEJZIHQxLng7CisgeCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0t CisgIDYgfCAxMTAwIHwgICAxMDAKKyAgMCB8ICA1MDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAg MTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAyNCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKwor LS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNoaW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDIueTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0 OiB0Mi55LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQyLnkKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgKFBBUlRJ QUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Mi55ID0gdDEueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQor ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueSwgdDEueAorICAg LT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1dDogdDJfMS55LCBzdW0o dDFfMS55KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDJfMS55CisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgKFBBUlRJQUwgc3Vt KHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFM IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueSwgdDFfMS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg T3V0cHV0OiB0Ml8yLnksIHN1bSh0MV8yLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLnkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDog dDJfMi55LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwg c3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCB0MV8yLngKKyg0NiByb3dzKQorCitTRUxFQ1Qg dDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9h Z2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55OworIHkgIHwgc3VtICB8 IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICA2IHwgMTEwMCB8ICAgMTAwCisgIDAgfCAg NTAwIHwgICAxMDAKKyAxOCB8IDEzMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMjQg fCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMg bm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0 aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQx LngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBX SEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0 ZQorICAgT3V0cHV0OiB0Mi54LCBzdW0odDEueCksIGNvdW50KCopCisgICBHcm91cCBLZXk6IHQy LngKKyAgIEZpbHRlcjogKGF2Zyh0MS54KSA+ICcxMCc6Om51bWVyaWMpCisgICAtPiAgQXBwZW5k CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwg KFBBUlRJQUwgc3VtKHQxXzEueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0 MV8xLngpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0Ml8x CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDJfMS55CisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJU SUFMIHN1bSh0MV8xLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54 KSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLngp LCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8xLngpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFMIHN1bSh0MV8yLngp KSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMi54KSkKKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8yLngsIHQyXzIueQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQ QVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi54KSwgUEFSVElBTCBjb3VudCgqKSwg UEFSVElBTCBhdmcodDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDFfMy54KSksIChQQVJUSUFMIGNvdW50KCop KSwgKFBBUlRJQUwgYXZnKHQxXzMueCkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8z LnkgPSB0MV8zLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIyX3AzIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0 Ml8zLnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQ QVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIFBB UlRJQUwgc3VtKHQxXzMueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzMueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Az IHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54Ciso NDEgcm93cykKKworU0VMRUNUIHQyLngsIHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTA7CisgeCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0t LS0tLSstLS0tLS0tCisgIDQgfCAxMjAwIHwgICAgNTAKKyAxNCB8IDEyMDAgfCAgICA1MAorIDE4 IHwgIDkwMCB8ICAgIDUwCisgIDIgfCAgNjAwIHwgICAgNTAKKyAxMiB8ICA2MDAgfCAgICA1MAor ICA4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dzKQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3Jl Z2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJf YWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVh Z2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5k CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MS54LCBz dW0oKHQyLnkgKyB0My55KSkKKyAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQy LnkgKyB0My55KSkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgKFBBUlRJQUwgc3Vt KCh0Mi55ICsgdDMueSkpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCBQ QVJUSUFMIHN1bSgodDIueSArIHQzLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngsIHQzLnks IHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLngg PSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAg IC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3Vt KCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBz dW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54 ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54 LCB0M18xLngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0M18xLnksIHQzXzEueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMiB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNf MS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8y LngsIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgIEdyb3VwIEtleTogdDFfMi54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBB UlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8y LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSAr IHQzXzIueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQz XzIueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDNfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18y LnksIHQzXzIueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZS T00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIu eCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7Cisg eCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICA0IHwgMTgwMDAKKyAgMiB8IDE0MDAwCisgIDgg fCAyNjAwMAorICA2IHwgMjIwMDAKKyAgMCB8IDEwMDAwCisgMTYgfCAyMjAwMAorIDEwIHwgMTAw MDAKKyAxNCB8IDE4MDAwCisgMTIgfCAxNDAwMAorIDE4IHwgMjYwMDAKKyAyNiB8IDIyMDAwCisg MjggfCAyNjAwMAorIDIyIHwgMTQwMDAKKyAyMCB8IDEwMDAwCisgMjQgfCAxODAwMAorKDE1IHJv d3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7 CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0 My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEu eCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0 My55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6 IHQzLnksIHN1bSgodDIueSArIHQzLnkpKQorICAgR3JvdXAgS2V5OiB0My55CisgICAtPiAgU29y dAorICAgICAgICAgT3V0cHV0OiB0My55LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpCisg ICAgICAgICBTb3J0IEtleTogdDMueQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIChQ QVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Ml8xLnggPSB0MV8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18x LnksIHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDNfMS55LCB0Ml8xLngsIHQzXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0M18xLnksIHQyXzEueCwgdDNfMS54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMS55LCB0Ml8xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0M18xLnksIHQyXzEu eCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0 Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEu eSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzXzEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0 M18xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFMIHN1bSgo dDJfMi55ICsgdDNfMi55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8y LnggPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQyXzIueCwg dDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi55LCB0M18yLnksIHQyXzIueCwgdDNfMi54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0M18yLnksIHQyXzIueCwgdDNfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLngg PSB0M18yLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNf My55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0MV8zLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQyXzMueCwgdDNfMy54LCBQQVJU SUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDNfMy55LCB0Ml8zLngsIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf My55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTb3J0IEtleTogdDNfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AzIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AzIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzMueAorKDczIHJvd3MpCisKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00g ZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBK T0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnk7CisgeSAg fCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgIDc1MDAKKyAgMiB8IDEzNTAwCisgIDQgfCAx OTUwMAorICA2IHwgMjU1MDAKKyAgOCB8IDMxNTAwCisgMTAgfCAyMjUwMAorIDEyIHwgMjg1MDAK KyAxNCB8IDM0NTAwCisgMTYgfCA0MDUwMAorIDE4IHwgNDY1MDAKKygxMCByb3dzKQorCitSRVNF VCBlbmFibGVfaGFzaGFnZzsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjE7CitEUk9QIFRBQkxF IGVhZ2VyX2FnZ190YWIyOworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25p bmcgc2NoZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9w MSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5H RSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBl YWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9t bF9wMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2Fn Z190YWJfbWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3RhYl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFM VUVTIEZST00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNf czIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkg VE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAl IDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitBTkFMWVpFIGVhZ2VyX2FnZ190 YWJfbWw7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9u IGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZ IHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFwcGVuZAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1 dDogdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MS54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJU SUFMIHN1bSh0Mi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eAorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDIueCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLngsIFBBUlRJQUwgc3VtKHQyLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9w MSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54 CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8xLngs IHN1bSh0Ml8xLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElB TCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgUEFSVElBTCBzdW0odDJfMS55 KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0Ml8yLnkpLCBjb3VudCgqKQorICAg ICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54ID0gdDJfMi54KQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3My IHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFM IHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueCwgUEFSVElBTCBzdW0odDJfMi55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0 Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJf Mi54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8z LngsIHN1bSh0Ml8zLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCAoUEFS VElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzMKKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgUEFSVElBTCBzdW0odDJf My55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV80LngsIHN1bSh0Ml80LnkpLCBjb3VudCgqKQor ICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54CisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIChQQVJU SUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzQueCwgUEFSVElBTCBzdW0odDJfNC55KSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MiB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwg dDJfNC54CisoNzYgcm93cykKKworU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0g dDIueCBHUk9VUCBCWSB0MS54OworIHggIHwgIHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLSst LS0tLS0tCisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8ICAxMTU2CisgIDcgfCAg ODA5MiB8ICAxMTU2CisgIDEgfCAgMTE1NiB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2Cisg IDQgfCAgNDYyNCB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDAgfCAgICAgMCB8ICAx MDg5CisgIDYgfCAgNjkzNiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgMTEgfCAxMTk3 OSB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTQg fCAxNTI0NiB8ICAxMDg5CisgMTIgfCAxMzA2OCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAxMDg5 CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTUgfCAxNjMzNSB8 ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjEgfCAy Mjg2OSB8ICAxMDg5CisgMjMgfCAyNTA0NyB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5Cisg MjAgfCAyMTc4MCB8ICAxMDg5CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAx MDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisgMjggfCAzMDQ5 MiB8ICAxMDg5CisoMzAgcm93cykKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3Qg bWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlv bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55LCBzdW0odDIueSks IGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwg dDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAg T3V0cHV0OiB0MS55LCBzdW0odDIueSksIGNvdW50KCopCisgICBHcm91cCBLZXk6IHQxLnkKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMS55LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMS55LCB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3VtKHQy XzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf MS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCAoUEFSVElB TCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfMi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi55LCB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwgc3VtKHQyXzIueSkpLCAoUEFSVElB TCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1 bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQyXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy55LCAoUEFSVElBTCBzdW0odDJfMy55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54 ID0gdDJfMy54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AyX3MyIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy55 LCB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy XzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNC55LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MxIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC55LCB0MV80LngKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQu eCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfNC55LCB0Ml80LngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDFfNS55LCAoUEFSVElBTCBzdW0odDJfNS55KSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNS55LCB0MV81LngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwgKFBBUlRJQUwg c3VtKHQyXzUueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNS54LCBQQVJUSUFMIHN1bSh0Ml81LnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzUueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQy XzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNS55LCB0Ml81 LngKKyg2NCByb3dzKQorCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEdST1VQIEJZIHQxLnk7CisgeSAgfCAgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0tKy0tLS0t LS0KKyAyOSB8IDMxNTgxIHwgIDEwODkKKyAgNCB8ICA0NjI0IHwgIDExNTYKKyAgMCB8ICAgICAw IHwgIDEwODkKKyAxMCB8IDExNTYwIHwgIDExNTYKKyAgOSB8IDEwNDA0IHwgIDExNTYKKyAgNyB8 ICA4MDkyIHwgIDExNTYKKyAxNSB8IDE2MzM1IHwgIDEwODkKKyAgNiB8ICA2OTM2IHwgIDExNTYK KyAyNiB8IDI4MzE0IHwgIDEwODkKKyAxMiB8IDEzMDY4IHwgIDEwODkKKyAyNCB8IDI2MTM2IHwg IDEwODkKKyAxOSB8IDIwNjkxIHwgIDEwODkKKyAyNSB8IDI3MjI1IHwgIDEwODkKKyAyMSB8IDIy ODY5IHwgIDEwODkKKyAxNCB8IDE1MjQ2IHwgIDEwODkKKyAgMyB8ICAzNDY4IHwgIDExNTYKKyAx NyB8IDE4NTEzIHwgIDEwODkKKyAyOCB8IDMwNDkyIHwgIDEwODkKKyAyMiB8IDIzOTU4IHwgIDEw ODkKKyAyMCB8IDIxNzgwIHwgIDEwODkKKyAxMyB8IDE0MTU3IHwgIDEwODkKKyAgMSB8ICAxMTU2 IHwgIDExNTYKKyAgNSB8ICA1NzgwIHwgIDExNTYKKyAxOCB8IDE5NjAyIHwgIDEwODkKKyAgMiB8 ICAyMzEyIHwgIDExNTYKKyAxNiB8IDE3NDI0IHwgIDEwODkKKyAyNyB8IDI5NDAzIHwgIDEwODkK KyAyMyB8IDI1MDQ3IHwgIDEwODkKKyAxMSB8IDExOTc5IHwgIDEwODkKKyAgOCB8ICA5MjQ4IHwg IDExNTYKKygzMCByb3dzKQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIg am9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2Fn Z190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4g ZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpLCBjb3Vu dCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQy LngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgKFBB UlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueCwgdDMueSwgdDMueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDIueCA9IHQzLngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKCh0Ml8x LnkgKyB0M18xLnkpKSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJ QUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQzXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8x LnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9 IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisg ICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgY291bnQoKikK KyAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkp KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54 ID0gdDJfMi54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AyX3MyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54 CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8yLngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMiB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18y LnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQzXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngK KyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzMueCwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFf My54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMu eCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzMKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgKFBBUlRJQUwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMu eSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueCwgdDNf My55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml8zCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AzX3MxIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdn cmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSwg Y291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFfNC54CisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80Lnkg KyB0M180LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml80LngsIHQzXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIHQz XzQueCwgUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml80LnksIHQyXzQueCwgdDNfNC55LCB0M180LngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzQueCA9IHQzXzQueCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wM19zMiB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M180LnksIHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQzXzQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55 LCB0M180LngKKygxMTEgcm93cykKKworU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdS T1VQIEJZIHQxLng7CisgeCAgfCAgIHN1bSAgIHwgY291bnQgCistLS0tKy0tLS0tLS0tLSstLS0t LS0tCisgIDggfCAgNjI4ODY0IHwgMzkzMDQKKyAgOSB8ICA3MDc0NzIgfCAzOTMwNAorICA3IHwg IDU1MDI1NiB8IDM5MzA0CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAz OTMwNAorICA0IHwgIDMxNDQzMiB8IDM5MzA0CisgIDIgfCAgMTU3MjE2IHwgMzkzMDQKKyAgMCB8 ICAgICAgIDAgfCAzNTkzNworICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDMgfCAgMjM1ODI0IHwg MzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEzIHwgIDkzNDM2MiB8IDM1OTM3CisgMTAg fCAgNzg2MDgwIHwgMzkzMDQKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8 IDM1OTM3CisgMTcgfCAxMjIxODU4IHwgMzU5MzcKKyAxOCB8IDEyOTM3MzIgfCAzNTkzNworIDE2 IHwgMTE0OTk4NCB8IDM1OTM3CisgMTUgfCAxMDc4MTEwIHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYg fCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAy MyB8IDE2NTMxMDIgfCAzNTkzNworIDIyIHwgMTU4MTIyOCB8IDM1OTM3CisgMjAgfCAxNDM3NDgw IHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3Cisg MjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworIDI4IHwgMjAxMjQ3 MiB8IDM1OTM3CisoMzAgcm93cykKKworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04g dDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQ IEJZIHQzLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsg dDMueSkpLCBjb3VudCgqKQorICAgR3JvdXAgS2V5OiB0My55CisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJ QUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0o KHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzEueSwgdDJfMS54LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0 M18xLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0M18xLnksIHQyXzEueCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzEueSwgdDNfMS55LCB0Ml8xLngsIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ax IHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf MS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNf MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDNfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFMIHN1 bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8yCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0Ml8yLngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0 Ml8yLnkgKyB0M18yLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0M18yLnksIHQyXzIueCwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNf Mi55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8yLnksIHQzXzIueSwgdDJfMi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9z MSB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQz XzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQzXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCAoUEFSVElB TCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMworICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDJfMy54LCB0M18zLngsIChQQVJUSUFMIHN1 bSgodDJfMy55ICsgdDNfMy55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMy55LCB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSAr IHQzXzMueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQzXzMueSwgdDJfMy54LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDJfczIgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55 LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0M18zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgKFBB UlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzQKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQyXzQueCwgdDNfNC54LCAoUEFSVElB TCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDJfNC54LCB0M180LngsIFBBUlRJQUwgc3VtKCh0Ml80 LnkgKyB0M180LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgR3JvdXAgS2V5OiB0M180LnksIHQyXzQueCwgdDNfNC54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzQueSwgdDNfNC55LCB0Ml80LngsIHQzXzQueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNC54ID0gdDNfNC54KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNC55LCB0Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQu eAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0M181Lnks IChQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNfNS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzUueCA9IHQyXzUueCkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0MV81CisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzUueAorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0Ml81LngsIHQzXzUueCwgKFBB UlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQyXzUueCwgdDNfNS54LCBQQVJUSUFMIHN1bSgo dDJfNS55ICsgdDNfNS55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDNfNS55LCB0Ml81LngsIHQzXzUueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml81LnksIHQzXzUueSwgdDJfNS54LCB0M181LngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzUueCA9IHQzXzUueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wM19zMiB0Ml81CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzUueSwgdDJfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQzXzUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0 M181LngKKyg5OSByb3dzKQorCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQo KikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0 MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAg QlkgdDMueTsKKyB5ICB8ICAgc3VtICAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0K KyAyOSB8IDIwODQzNDYgfCAzNTkzNworICA0IHwgIDMxNDQzMiB8IDM5MzA0CisgIDAgfCAgICAg ICAwIHwgMzU5MzcKKyAxMCB8ICA3ODYwODAgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0 CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAxNSB8IDEwNzgxMTAgfCAzNTkzNworICA2IHwgIDQ3 MTY0OCB8IDM5MzA0CisgMjYgfCAxODY4NzI0IHwgMzU5MzcKKyAxMiB8ICA4NjI0ODggfCAzNTkz NworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyNSB8IDE3 OTY4NTAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMTQgfCAxMDA2MjM2IHwgMzU5 MzcKKyAgMyB8ICAyMzU4MjQgfCAzOTMwNAorIDE3IHwgMTIyMTg1OCB8IDM1OTM3CisgMjggfCAy MDEyNDcyIHwgMzU5MzcKKyAyMiB8IDE1ODEyMjggfCAzNTkzNworIDIwIHwgMTQzNzQ4MCB8IDM1 OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAgMSB8ICAgNzg2MDggfCAzOTMwNAorICA1IHwg IDM5MzA0MCB8IDM5MzA0CisgMTggfCAxMjkzNzMyIHwgMzU5MzcKKyAgMiB8ICAxNTcyMTYgfCAz OTMwNAorIDE2IHwgMTE0OTk4NCB8IDM1OTM3CisgMjcgfCAxOTQwNTk4IHwgMzU5MzcKKyAyMyB8 IDE2NTMxMDIgfCAzNTkzNworIDExIHwgIDc5MDYxNCB8IDM1OTM3CisgIDggfCAgNjI4ODY0IHwg MzkzMDQKKygzMCByb3dzKQorCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCAxZDhhNDE0ZWVhLi4yNTBhOWRiYTIxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTExOSw3ICsxMTksNyBAQCB0ZXN0OiBwbGFuY2Fj aGUgbGltaXQgcGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgY29u dmVyc2lvbiB0cgogIyBUaGUgc3RhdHMgdGVzdCByZXNldHMgc3RhdHMsIHNvIG5vdGhpbmcgZWxz ZSBuZWVkaW5nIHN0YXRzIGFjY2VzcyBjYW4gYmUgaW4KICMgdGhpcyBncm91cC4KICMgLS0tLS0t LS0tLQotdGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFz aF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVz b3J0IGV4cGxhaW4gY29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUKK3Rlc3Q6IHBh cnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGlu ZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNv bXByZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGljYXRlIGVhZ2VyX2FnZ3JlZ2F0ZQogCiAjIGV2 ZW50X3RyaWdnZXIgZGVwZW5kcyBvbiBjcmVhdGVfYW0gYW5kIGNhbm5vdCBydW4gY29uY3VycmVu dGx5IHdpdGgKICMgYW55IHRlc3QgdGhhdCBydW5zIERETApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Vh Z2VyX2FnZ3JlZ2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YWJhMmM0MTU1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2Vy X2FnZ3JlZ2F0ZS5zcWwKQEAgLTAsMCArMSwyMDUgQEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElP TgorLS0gVGVzdCB3ZSBjYW4gcHVzaCBhZ2dyZWdhdGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCisK Ky0tIEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxl ZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworCitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVB VEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7 CisKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDIgU0VMRUNUIGksIGkl MTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJf YWdnX3QzIFNFTEVDVCBpJTEwLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAp aTsKKworQU5BTFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIg YmFzZSByZWwKKy0tCisKKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhl IHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUg YWdncmVnYXRpb24uCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24K K1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvbjsKK1NFVCBlbmFibGVfc29ydCBUTyBvZmY7CisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAg QlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9J TiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKworLS0gUHJv ZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdn IFRPIG9mZjsKK1NFVCBlbmFibGVfc29ydCBUTyBvbjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lO IGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hOworU0VMRUNUIHQx LmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBP TiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hOworCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gZGVm YXVsdDsKK1NFVCBlbmFibGVfc29ydCBUTyBkZWZhdWx0OworCisKKy0tCistLSBUZXN0IGVhZ2Vy IGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCisKKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJs ZXMsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0g YW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGgg aGFzaCBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9uOworU0VUIGVuYWJsZV9z b3J0IFRPIG9mZjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JP VVAgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdn X3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0 cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitT RVQgZW5hYmxlX3NvcnQgVE8gb247CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lO IGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hOworCitTRVQgZW5h YmxlX2hhc2hhZ2cgVE8gZGVmYXVsdDsKK1NFVCBlbmFibGVfc29ydCBUTyBkZWZhdWx0OworCisK Ky0tCistLSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIG91dGVyIGpvaW4K Ky0tCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW4gYmUgcHVzaGVkIGRvd24gdG8gdGhlIG5v bi1udWxsYWJsZSBzaWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMu YSwgYXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3Qz IHQzIE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQxLmIg PSB0My5iIEdST1VQIEJZIHQzLmE7CisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUg cHVzaGVkIGRvd24gdG8gdGhlIG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCB0My5hLCBhdmcodDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBK T0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0MS5iID0gdDMuYiBHUk9VUCBCWSB0My5hOworU0VMRUNU IHQzLmEsIGF2Zyh0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdn X3QzIHQzIE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CisKKworLS0KKy0tIFRlc3QgdGhh dCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFy YWxsZWxfc2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5f cGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlcj00OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQx LmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZ IHQxLmE7CisKK1JFU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBs ZV9jb3N0OworUkVTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CisKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7 CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QzOworCisK Ky0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIGZvciBwYXJ0aXRpb253aXNlIGpvaW4KKy0t CisKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVmYXVsdCBp cyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8gdHJ1ZTsK Ky0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJs ZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworCitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIx IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFi MV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMyBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh5KTsKK0NSRUFURSBU QUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AyIFBB UlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOwor Q1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFi MiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3Rh YjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsIDI5OSwgMikg aTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVDVCBpICUgMjAsIGkgJSAzMCBGUk9N IGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjE7 CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIyOworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRj aGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQy LnkgR1JPVVAgQlkgdDEueDsKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNoaW5nIGtl eQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0MS55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUg dDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueTsKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLngg PSB0Mi55IEdST1VQIEJZIHQyLnk7CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90 IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRp b24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQxLngp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVS RSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMDsKK1NFTEVD VCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2Vy X2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0 MS54KSA+IDEwOworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiBy ZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9O IHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55 KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9 IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54 OworCistLSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMu eSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLngg PSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMu eTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEg Sk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIx IHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnk7CitSRVNFVCBlbmFibGVfaGFzaGFnZzsK KworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjI7 CisKKworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcgc2NoZW1lCist LQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMSBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBG T1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFi X21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFM VUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDMg UEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMw KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9w M19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZST00gKDIw KSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNfczIgUEFSVElUSU9O IE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkgVE8gKDMwKTsKK0lO U0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAlIDMwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYl9tbDsKKwor LS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJm b3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54Owor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54Owor CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdh dGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9V UCBCWSB0MS55OworU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9V UCBCWSB0MS55OworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiBy ZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJf bWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJf YWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54OworU0VMRUNUIHQxLngs IHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVnYXRp b24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSAr IHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2df dGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54 ID0gdDMueCBHUk9VUCBCWSB0My55OworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdS T1VQIEJZIHQzLnk7CisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKLS0gCjIuMzEuMAoK --000000000000dda6300612e43798--