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 1tcKIy-00GtVj-Og for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Jan 2025 08:17:13 +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 1tcKIv-00A6kV-Pm for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Jan 2025 08:17:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tcKIv-00A6jP-06 for pgsql-hackers@lists.postgresql.org; Mon, 27 Jan 2025 08:17:09 +0000 Received: from mail-vs1-xe36.google.com ([2607:f8b0:4864:20::e36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tcKIq-001j5g-0s for pgsql-hackers@postgresql.org; Mon, 27 Jan 2025 08:17:07 +0000 Received: by mail-vs1-xe36.google.com with SMTP id ada2fe7eead31-4afe6a8d2e1so2380081137.1 for ; Mon, 27 Jan 2025 00:17:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737965823; x=1738570623; 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=tP/ILQ5rskdWhQ+9twXcRqAKwJyBgOD5mtsos80QGCA=; b=F++aZHwd7JgFKBReOPZFNCl4AK4hCALf0qhl3MYXeETUpCh6RifKVXKDrfWm2L13fX Eb69MLXGLSPJWy4A/zWqSq4rsdjMFMF0ebWC0VHkAR0UtopEZi/qhW8Nc97CLqjdebzK 7tx39nvlg2mh3hnVYuc84lwvouqDkrJCtUZIKhXeb9X9mDpDM2exLT1OJPNmlNsCaGWg BD7zyWNdw5JntO7u6B7oYcIYIb9lvmTo0rn6WrZiwjR5AuLo77Kz6aclyI6sDt1vjF0w K3yYjoJWxxj6bjdRACm2IxomcUwflckmHrN+HAO7QMexyDTxIPr/87r+UkThKmAD176L rw+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737965823; x=1738570623; 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=tP/ILQ5rskdWhQ+9twXcRqAKwJyBgOD5mtsos80QGCA=; b=FpkTbUPRC+roy7Uk6BOJklG/mA5qlX3WiEc9Ou8cnA5kTxW+BXWdGSj/5c6PEe+zhV RMUWEODzK5ioL4Kp/D9dtGLZ6kAfuKa30g4QnOCO9lHlY/u+DqvWt9Wzo7fPlnPn0MwB aB520leKymfgqnYiL1Hhd75BrvZ6Pymy10rqpN9VBl9/MqApd26KvkUeKzwKm5JPJQdE lHF6BIUZnpRlPrdW6dX5x/3z3Xjc03Bogej1HySsBG4pNuNMBpy28DmxNLW4tgHt/Vdh +I09TE4fKXzUEM63QGtJizmJTc0wA5TQaEwX1fD2wShSTUNH9VUApeZZCxi6rQGpx8yY uIIg== X-Forwarded-Encrypted: i=1; AJvYcCXPkkkEkJRSeyALUljrqa73tQXjCPzVhEgrJpA7ueMezzsZrfphZ+3V9DmxyUuJC0zOYFSy+ZZw33e7/ujb@postgresql.org X-Gm-Message-State: AOJu0YxFru+qVDvRo4JkC0/IGJL8U+K3DgLIxfc66/GV+pb1VNFoGd5t v7QSzEy/0ptTH+tuWtJT2Mj+/dryNtV8goBXGc8Gki/5RYG5srHHZy0HmTKeoFD7SDqggGbNNZB nWm6moy4olvr+APmW6Un2qx/ryXM= X-Gm-Gg: ASbGncuUp3hKbOUYcsWL9i3lqLCckGbBV9lPvD3CQtjPYsSIZLYRc/XbBTFrv/zSGDM vbvYWYXZ0nlVssJD9OU+Pgyn374qyfMhWjB4sHaZHSIFsm7oGDWNyIaO9B2Hp5wfXkV+2DVdGJH 0PNHZC/aJUVS4sJEEA X-Google-Smtp-Source: AGHT+IEn3xrs0+f0oIfVdiTambXRlV2QLBNZhYG1Xq93ayRM6CX3PXA1+Tma3iUk4KJoHeBC47rtsznKZZaotzumaGU= X-Received: by 2002:a05:6102:82c8:b0:4b2:bcae:a721 with SMTP id ada2fe7eead31-4b709d1a689mr9505865137.11.1737965823017; Mon, 27 Jan 2025 00:17:03 -0800 (PST) MIME-Version: 1.0 References: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> <4162f7f7-6fd6-4720-98e2-89f80e3de2ed@joeconway.com> <153b71b8-b6fb-4930-aaff-a7334cb3f6d6@joeconway.com> <8ef5f5d6-38db-4624-8eef-2d96c9eba9d4@joeconway.com> In-Reply-To: From: jian he Date: Mon, 27 Jan 2025 16:16:26 +0800 X-Gm-Features: AWEUYZn92JqNffrV_3Z5Jq-P7iE8Klo0ZfO7SaSvSIyK4GgA91UEkRsD81KxLmc Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: Joe Conway Cc: "Andrey M. Borodin" , Dean Rasheed , Daniel Verite , Andrew Dunstan , Davin Shearer , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000083bf13062cabb353" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000083bf13062cabb353 Content-Type: text/plain; charset="UTF-8" hi. There are two ways we can use to represent the new copy format: json. 1. typedef struct CopyFormatOptions { bool binary; /* binary format? */ bool freeze; /* freeze rows on loading? */ bool csv_mode; /* Comma Separated Value format? */ bool json_mode; /* JSON format? */ ... } 2. typedef struct CopyFormatOptions { CopyFormat format; /* format of the COPY operation */ ..... } typedef enum CopyFormat { COPY_FORMAT_TEXT = 0, COPY_FORMAT_BINARY, COPY_FORMAT_CSV, COPY_FORMAT_JSON, } CopyFormat; both the sizeof(cstate->opts) (CopyToStateData.CopyFormatOptions) is 184. so the struct size will not influence the performance. I also did some benchmarks when using CopyFormat. the following are the benchmarks info: ------------------------------------------------------------------------------------------------------- create unlogged table t as select g from generate_series(1, 1_000_000) g; build_type=release patch: copy t to '/dev/null' json \watch i=0.1 c=10 last execution Time: 108.741 ms copy t to '/dev/null' (format text) \watch i=0.1 c=10 last execution Time: 42.600 ms build_type=release master: copy t to '/dev/null' (format text) \watch i=0.1 c=10 last execution Time Time: 42.948 ms --------------------------------------------------------- so a new version is attached, using the struct CopyFormatOptions. changes mainly in CopyOneRowTo. now it is: """" if(!cstate->rel) { memcpy(TupleDescAttr(slot->tts_tupleDescriptor, 0), TupleDescAttr(cstate->queryDesc->tupDesc, 0), cstate->queryDesc->tupDesc->natts * sizeof(FormData_pg_attribute)); for (int i = 0; i < cstate->queryDesc->tupDesc->natts; i++) populate_compact_attribute(slot->tts_tupleDescriptor, i); BlessTupleDesc(slot->tts_tupleDescriptor); } """" reasoning for change: for composite_to_json to construct json key, we only need FormData_pg_attribute.attname but code path composite_to_json->fastgetattr->TupleDescCompactAttr->verify_compact_attribute means we also need to call populate_compact_attribute to populate other attributes. v14-0001-Introduce-CopyFormat-and-replace-csv_mode-and-bi.patch, author is by Joel Jacobson. As I mentioned in above, replacing 3 bool fields by an enum didn't change the struct CopyFormatOptions. but consolidated 3 bool fields into one enum to make code more lean. I think the refactoring (v14-0001) is worth it. --00000000000083bf13062cabb353 Content-Type: text/x-patch; charset="US-ASCII"; name="v14-0003-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Disposition: attachment; filename="v14-0003-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6erwnqh0 RnJvbSAzOGZlOTBkMDA3NDZiNzQ0MWZhZWY0YmRjMzkyMDkwYWVhMWI5ZWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjcgSmFuIDIwMjUgMTY6MDU6MzcgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx NCAzLzNdIEFkZCBvcHRpb24gZm9yY2VfYXJyYXkgZm9yIENPUFkgSlNPTiBGT1JNQVQKCmZvcmNl X2FycmF5IG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIENPUFkgVE8gd2l0aCBKU09OIGZvcm1h dC4KaXQgbWFrZSB0aGUgb3V0cHV0IGpzb24gb3V0cHV0IGJlaGF2ZSBsaWtlIGpzb24gYXJyYXkg dHlwZS4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FMdmZVa0J4VFl5NXVXUEZW d3BrXzdpaTJ6Z1QwN3QzZC15Ul9jeTRzZnJyTFUlM0RrY2clNDBtYWlsLmdtYWlsLmNvbQpkaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzZhMDQ2MjhkLTBkNTMtNDFkOS05ZTM1LTVhOGRj MzAyYzM0Y0Bqb2Vjb253YXkuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgICAg ICAgICB8IDE0ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAg ICAgIHwgMTMgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAg ICB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC90YWItY29t cGxldGUuaW4uYyAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAg ICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQgfCAyMyArKysrKysr KysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgICAgICB8ICA5 ICsrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NvcHkuc2dtbAppbmRleCA1YmYwZjM4ZDkwLi41MGNlYmVjMGNlIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHku c2dtbApAQCAtNDMsNiArNDMsNyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgRk9SQ0Vf UVVPVEUgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVw bGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgIEZPUkNFX05PVF9OVUxMIHsgKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5d ICkgfCAqIH0KICAgICBGT1JDRV9OVUxMIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgfCAqIH0KKyAgICBGT1JDRV9B UlJBWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJs ZT4gXQogICAgIE9OX0VSUk9SIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9h Y3Rpb248L3JlcGxhY2VhYmxlPgogICAgIFJFSkVDVF9MSU1JVCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bWF4ZXJyb3I8L3JlcGxhY2VhYmxlPgogICAgIEVOQ09ESU5HICc8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZW5jb2RpbmdfbmFtZTwvcmVwbGFjZWFibGU+JwpAQCAt MzkyLDYgKzM5MywxOSBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRh YmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgPC9saXN0aXRlbT4K ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRl cmFsPkZPUkNFX0FSUkFZPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgRm9yY2Ugb3V0cHV0IG9mIHNxdWFyZSBicmFja2V0cyBhcyBhcnJheSBkZWNv cmF0aW9ucyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICBhbmQgZW5kIG9mIG91dHB1dCwgYW5kIGNv bW1hcyBiZXR3ZWVuIHRoZSByb3dzLiBJdCBpcyBhbGxvd2VkIG9ubHkgaW4KKyAgICAgIDxjb21t YW5kPkNPUFkgVE88L2NvbW1hbmQ+LCBhbmQgb25seSB3aGVuIHVzaW5nCisgICAgICA8bGl0ZXJh bD5KU09OPC9saXRlcmFsPiBmb3JtYXQuIFRoZSBkZWZhdWx0IGlzCisgICAgICA8bGl0ZXJhbD5m YWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+PGxpdGVyYWw+T05fRVJS T1I8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBj MDIzNGQyMmU1Li4yZGJiZDQwMDdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC01MDQsNiArNTA0LDcg QEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlib29sCQlvbl9lcnJv cl9zcGVjaWZpZWQgPSBmYWxzZTsKIAlib29sCQlsb2dfdmVyYm9zaXR5X3NwZWNpZmllZCA9IGZh bHNlOwogCWJvb2wJCXJlamVjdF9saW1pdF9zcGVjaWZpZWQgPSBmYWxzZTsKKwlib29sCQlmb3Jj ZV9hcnJheV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICpvcHRpb247CiAKIAkvKiBT dXBwb3J0IGV4dGVybmFsIHVzZSBmb3Igb3B0aW9uIHNhbml0eSBjaGVja2luZyAqLwpAQCAtNjU4 LDYgKzY1OSwxMyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJ CQkJCQlkZWZlbC0+ZGVmbmFtZSksCiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg ZGVmZWwtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImZvcmNlX2FycmF5IikgPT0gMCkKKwkJeworCQkJaWYgKGZvcmNlX2FycmF5X3NwZWNpZmll ZCkKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKwkJCWZvcmNl X2FycmF5X3NwZWNpZmllZCA9IHRydWU7CisJCQlvcHRzX291dC0+Zm9yY2VfYXJyYXkgPSBkZWZH ZXRCb29sZWFuKGRlZmVsKTsKKwkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJvbl9lcnJvciIpID09IDApCiAJCXsKIAkJCWlmIChvbl9lcnJvcl9zcGVjaWZpZWQpCkBAIC05 MDcsNiArOTE1LDExIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJ CQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQllcnJtc2co IkNPUFkganNvbiBtb2RlIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiQ09QWSBGUk9NIikpOwog CisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfSlNPTiAmJiBvcHRzX291dC0+ Zm9yY2VfYXJyYXkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIkNPUFkgJXMgY2FuIG9ubHkgdXNlZCB3 aXRoIEpTT04gbW9kZSIsICJGT1JDRV9BUlJBWSIpKTsKKwogCWlmIChvcHRzX291dC0+ZGVmYXVs dF9wcmludCkKIAl7CiAJCWlmICghaXNfZnJvbSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggZDVk MWJjNGVjOS4uNzY0ZWQ0NzY2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eXRvLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTgxLDYgKzgxLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgQ29weVRvU3RhdGVEYXRhCiAJTGlzdAkgICAqYXR0bnVtbGlzdDsJ CS8qIGludGVnZXIgbGlzdCBvZiBhdHRudW1zIHRvIGNvcHkgKi8KIAljaGFyCSAgICpmaWxlbmFt ZTsJCS8qIGZpbGVuYW1lLCBvciBOVUxMIGZvciBTVERPVVQgKi8KIAlib29sCQlpc19wcm9ncmFt OwkJLyogaXMgJ2ZpbGVuYW1lJyBhIHByb2dyYW0gdG8gcG9wZW4/ICovCisJYm9vbAkJanNvbl9y b3dfZGVsaW1fbmVlZGVkOwkvKiBuZWVkIGRlbGltaXRlciB0byBzdGFydCBuZXh0IGpzb24gYXJy YXkgZWxlbWVudCAqLwogCWNvcHlfZGF0YV9kZXN0X2NiIGRhdGFfZGVzdF9jYjsgLyogZnVuY3Rp b24gZm9yIHdyaXRpbmcgZGF0YSAqLwogCiAJQ29weUZvcm1hdE9wdGlvbnMgb3B0czsKQEAgLTg1 OCw2ICs4NTksMTUgQEAgRG9Db3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQogCiAJCQlDb3B5U2Vu ZEVuZE9mUm93KGNzdGF0ZSk7CiAJCX0KKwkJLyoKKwkJICogSWYgSlNPTiBoYXMgYmVlbiByZXF1 ZXN0ZWQsIGFuZCBGT1JDRV9BUlJBWSBoYXMgYmVlbiBzcGVjaWZpZWQgdGhlbgorCQkgKiBzZW5k IHRoZSBvcGVuaW5nIGJyYWNrZXQuCisJCSovCisJCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09 IENPUFlfRk9STUFUX0pTT04gJiYgY3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorCQl7CisJCQlD b3B5U2VuZENoYXIoY3N0YXRlLCAnWycpOworCQkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwor CQl9CiAJfQogCiAJaWYgKGNzdGF0ZS0+cmVsKQpAQCAtOTA1LDYgKzkxNSwxNSBAQCBEb0NvcHlU byhDb3B5VG9TdGF0ZSBjc3RhdGUpCiAJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKIAl9CiAK KwkvKgorCSAqIElmIEpTT04gaGFzIGJlZW4gcmVxdWVzdGVkLCBhbmQgRk9SQ0VfQVJSQVkgaGFz IGJlZW4gc3BlY2lmaWVkIHRoZW4KKwkgKiBzZW5kIHRoZSBjbG9zaW5nIGJyYWNrZXQuCisJKi8K KwlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9KU09OICYmIGNzdGF0ZS0+ b3B0cy5mb3JjZV9hcnJheSkKKwl7CisJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICddJyk7CisJCUNv cHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKKwl9CiAJTWVtb3J5Q29udGV4dERlbGV0ZShjc3RhdGUt PnJvd2NvbnRleHQpOwogCiAJaWYgKGZlX2NvcHkpCkBAIC0xMDA4LDYgKzEwMjcsMTUgQEAgQ29w eU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJCXJl c3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJCWNvbXBvc2l0ZV90b19qc29uKHJvd2RhdGEsIHJl c3VsdCwgZmFsc2UpOwogCisJCWlmIChjc3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCAmJiBj c3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCQlDb3B5U2VuZENoYXIoY3N0YXRlLCAnLCcpOwor CQllbHNlIGlmIChjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCXsKKwkJCS8qIGZpcnN0IHJv dyBuZWVkcyBubyBkZWxpbWl0ZXIgKi8KKwkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICcgJyk7CisJ CQljc3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCA9IHRydWU7CisJCX0KKwogCQlDb3B5U2Vu ZERhdGEoY3N0YXRlLCByZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKTsKIAl9CiAKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuaW4uYwppbmRleCA1ZmI1Y2IyZGFhLi4wMmQwZDRlM2NmIDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0 ZS5pbi5jCkBAIC0zMjQ5LDcgKzMyNDksNyBAQCBtYXRjaF9wcmV2aW91c193b3JkcyhpbnQgcGF0 dGVybl9pZCwKIAllbHNlIGlmIChNYXRjaGVzKCJDT1BZfFxcY29weSIsIE1hdGNoQW55LCAiRlJP TXxUTyIsIE1hdGNoQW55LCAiV0lUSCIsICIoIikpCiAJCUNPTVBMRVRFX1dJVEgoIkZPUk1BVCIs ICJGUkVFWkUiLCAiREVMSU1JVEVSIiwgIk5VTEwiLAogCQkJCQkgICJIRUFERVIiLCAiUVVPVEUi LCAiRVNDQVBFIiwgIkZPUkNFX1FVT1RFIiwKLQkJCQkJICAiRk9SQ0VfTk9UX05VTEwiLCAiRk9S Q0VfTlVMTCIsICJFTkNPRElORyIsICJERUZBVUxUIiwKKwkJCQkJICAiRk9SQ0VfTk9UX05VTEwi LCAiRk9SQ0VfTlVMTCIsICJGT1JDRV9BUlJBWSIsICJFTkNPRElORyIsICJERUZBVUxUIiwKIAkJ CQkJICAiT05fRVJST1IiLCAiTE9HX1ZFUkJPU0lUWSIpOwogCiAJLyogQ29tcGxldGUgQ09QWSA8 c3RoPiBGUk9NfFRPIGZpbGVuYW1lIFdJVEggKEZPUk1BVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCmluZGV4 IDA3ZmNjMmJjOWEuLjQ2NmFiNzZkYWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTkyLDYgKzkyLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAlMaXN0CSAgICpmb3JjZV9udWxs OwkJLyogbGlzdCBvZiBjb2x1bW4gbmFtZXMgKi8KIAlib29sCQlmb3JjZV9udWxsX2FsbDsgLyog Rk9SQ0VfTlVMTCAqPyAqLwogCWJvb2wJICAgKmZvcmNlX251bGxfZmxhZ3M7CS8qIHBlci1jb2x1 bW4gQ1NWIEZOIGZsYWdzICovCisJYm9vbAkJZm9yY2VfYXJyYXk7CS8qIGFkZCBKU09OIGFycmF5 IGRlY29yYXRpb25zICovCiAJYm9vbAkJY29udmVydF9zZWxlY3RpdmVseTsJLyogZG8gc2VsZWN0 aXZlIGJpbmFyeSBjb252ZXJzaW9uPyAqLwogCUNvcHlPbkVycm9yQ2hvaWNlIG9uX2Vycm9yOyAv KiB3aGF0IHRvIGRvIHdoZW4gZXJyb3IgaGFwcGVuZWQgKi8KIAlDb3B5TG9nVmVyYm9zaXR5Q2hv aWNlIGxvZ192ZXJib3NpdHk7CS8qIHZlcmJvc2l0eSBvZiBsb2dnZWQgbWVzc2FnZXMgKi8KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CmluZGV4IGI0NDc5YmM3MmEuLmZmZWU3YmZmMDAgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dApAQCAtMTEwLDYgKzExMCwyOSBAQCBMSU5FIDE6 IGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgb25fZXJyb3IgaWdub3JlKTsK IGNvcHkgY29weXRlc3QgZnJvbSBzdGRpbihmb3JtYXQganNvbik7CiBFUlJPUjogIENPUFkganNv biBtb2RlIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSBGUk9NCiAtLSBhbGwgb2YgdGhlIGFib3Zl IHNob3VsZCB5aWVsZCBlcnJvcgorLS1FcnJvcgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZv cm1hdCBjc3YsIGZvcmNlX2FycmF5IHRydWUpOworRVJST1I6ICBDT1BZIEZPUkNFX0FSUkFZIGNh biBvbmx5IHVzZWQgd2l0aCBKU09OIG1vZGUKKy0tb2sKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0 IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkpOworWworIHsic3R5bGUiOiJET1MiLCJ0ZXN0Ijoi YWJjXHJcbmRlZiIsImZpbGxlciI6MX0KKyx7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRl ZiIsImZpbGxlciI6Mn0KKyx7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVy IjozfQorLHsic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmls bGVyIjo0fQorXQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9h cnJheSB0cnVlKTsKK1sKKyB7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxs ZXIiOjF9CisseyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Ciss eyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyx7InN0eWxlIjoi ZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KK10KK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgZmFsc2UpOworeyJz dHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVu aXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6 ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJc XFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CiAtLSBlbWJlZGRlZCBlc2NhcGVkIGNoYXJhY3RlcnMK IGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVzdCAoCiAgICAgaWQgYmlnc2VyaWFsLApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb3B5LnNxbAppbmRleCAwNTRmY2U5NWNiLi43YTE3NWNhNzZhIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b3B5LnNxbApAQCAtMTAxLDYgKzEwMSwxNSBAQCBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9y bWF0IGpzb24sIG9uX2Vycm9yIGlnbm9yZSk7CiBjb3B5IGNvcHl0ZXN0IGZyb20gc3RkaW4oZm9y bWF0IGpzb24pOwogLS0gYWxsIG9mIHRoZSBhYm92ZSBzaG91bGQgeWllbGQgZXJyb3IKIAorLS1F cnJvcgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBjc3YsIGZvcmNlX2FycmF5IHRy dWUpOworCistLW9rCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNl X2FycmF5KTsKKworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9h cnJheSB0cnVlKTsKKworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3Jj ZV9hcnJheSBmYWxzZSk7CiAtLSBlbWJlZGRlZCBlc2NhcGVkIGNoYXJhY3RlcnMKIGNyZWF0ZSB0 ZW1wIHRhYmxlIGNvcHlqc29udGVzdCAoCiAgICAgaWQgYmlnc2VyaWFsLAotLSAKMi4zNC4xCgo= --00000000000083bf13062cabb353 Content-Type: text/x-patch; charset="US-ASCII"; name="v14-0002-introduce-json-format-for-COPY-TO.patch" Content-Disposition: attachment; filename="v14-0002-introduce-json-format-for-COPY-TO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6erwnqq1 RnJvbSBlNDJlMDY5NmY2MzYyZmM4YWJhMDFlZjFjNTQ2YzQyMjRhYWY2NWMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjcgSmFuIDIwMjUgMTU6MDU6NDggKzA4MDAKU3ViamVjdDogW1BBVENIIHYx NCAyLzNdIGludHJvZHVjZSBqc29uIGZvcm1hdCBmb3IgQ09QWSBUTwoKanNvbiBmb3JtYXQgaXMg b25seSBhbGxvd2VkIGluIENPUFkgVE8gb3BlcmF0aW9uLgphbHNvIGNhbm5vdCBiZSB1c2VkIHdp dGgge2hlYWRlciwgZGVmYXVsdCwgbnVsbCwgZGVsaW1pdGVyfSBvcHRpb25zIGFuZCBtYW55IG90 aGVyIG9wdGlvbnMuCmZ1bGx5IHRlc3RlZCBvbiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNx bC4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FMdmZVa0J4VFl5NXVXUEZWd3Br XzdpaTJ6Z1QwN3QzZC15Ul9jeTRzZnJyTFUlM0RrY2clNDBtYWlsLmdtYWlsLmNvbQpkaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzZhMDQ2MjhkLTBkNTMtNDFkOS05ZTM1LTVhOGRjMzAy YzM0Y0Bqb2Vjb253YXkuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgICAgICAg ICB8IDEzICsrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jICAgICAgICB8IDI5ICsr KysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICB8IDUxICsrKysr KysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgIHwgIDgg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYyAgICAgICB8ICA1ICstCiBzcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaCAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uLmggICAgICAgICAg IHwgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCB8IDc0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgICAg ICB8IDQ3ICsrKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDIxOSBpbnNlcnRp b25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Nv cHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCmluZGV4IDgzOTQ0MDJmMDkuLjVi ZjBmMzhkOTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCkBAIC0yMTksMTAgKzIxOSwxNSBAQCBDT1BZIHsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICgg PHJlcGxhY2VhYmxlCiAgICAgICBTZWxlY3RzIHRoZSBkYXRhIGZvcm1hdCB0byBiZSByZWFkIG9y IHdyaXR0ZW46CiAgICAgICA8bGl0ZXJhbD50ZXh0PC9saXRlcmFsPiwKICAgICAgIDxsaXRlcmFs PmNzdjwvbGl0ZXJhbD4gKENvbW1hIFNlcGFyYXRlZCBWYWx1ZXMpLAorICAgICAgPGxpdGVyYWw+ anNvbjwvbGl0ZXJhbD4gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSwKICAgICAgIG9yIDxs aXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4uCiAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD50 ZXh0PC9saXRlcmFsPi4KICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzcWwtY29weS1maWxlLWZv cm1hdHMiLz4gYmVsb3cgZm9yIGRldGFpbHMuCiAgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+Cisg ICAgICBUaGUgPGxpdGVyYWw+anNvbjwvbGl0ZXJhbD4gb3B0aW9uIGlzIGFsbG93ZWQgb25seSBp bgorICAgICAgPGNvbW1hbmQ+Q09QWSBUTzwvY29tbWFuZD4uCisgICAgIDwvcGFyYT4KICAgICA8 L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTI1Nyw3ICsyNjIsNyBAQCBDT1BZ IHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PiBbICggPHJlcGxhY2VhYmxlCiAgICAgICAobGluZSkgb2YgdGhlIGZpbGUuICBUaGUgZGVmYXVs dCBpcyBhIHRhYiBjaGFyYWN0ZXIgaW4gdGV4dCBmb3JtYXQsCiAgICAgICBhIGNvbW1hIGluIDxs aXRlcmFsPkNTVjwvbGl0ZXJhbD4gZm9ybWF0LgogICAgICAgVGhpcyBtdXN0IGJlIGEgc2luZ2xl IG9uZS1ieXRlIGNoYXJhY3Rlci4KLSAgICAgIFRoaXMgb3B0aW9uIGlzIG5vdCBhbGxvd2VkIHdo ZW4gdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFsPiBmb3JtYXQuCisgICAgICBUaGlzIG9w dGlvbiBpcyBub3QgYWxsb3dlZCB3aGVuIHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4g b3IgPGxpdGVyYWw+anNvbjwvbGl0ZXJhbD4gZm9ybWF0LgogICAgICA8L3BhcmE+CiAgICAgPC9s aXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMjcxLDcgKzI3Niw3IEBAIENPUFkgeyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsg KCA8cmVwbGFjZWFibGUKICAgICAgIHN0cmluZyBpbiA8bGl0ZXJhbD5DU1Y8L2xpdGVyYWw+IGZv cm1hdC4gWW91IG1pZ2h0IHByZWZlciBhbgogICAgICAgZW1wdHkgc3RyaW5nIGV2ZW4gaW4gdGV4 dCBmb3JtYXQgZm9yIGNhc2VzIHdoZXJlIHlvdSBkb24ndCB3YW50IHRvCiAgICAgICBkaXN0aW5n dWlzaCBudWxscyBmcm9tIGVtcHR5IHN0cmluZ3MuCi0gICAgICBUaGlzIG9wdGlvbiBpcyBub3Qg YWxsb3dlZCB3aGVuIHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gZm9ybWF0LgorICAg ICAgVGhpcyBvcHRpb24gaXMgbm90IGFsbG93ZWQgd2hlbiB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8 L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmpzb248L2xpdGVyYWw+IGZvcm1hdC4KICAgICAgPC9wYXJh PgogCiAgICAgIDxub3RlPgpAQCAtMjk0LDcgKzI5OSw3IEBAIENPUFkgeyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFi bGUKICAgICAgIGlzIGZvdW5kIGluIHRoZSBpbnB1dCBmaWxlLCB0aGUgZGVmYXVsdCB2YWx1ZSBv ZiB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4KICAgICAgIHdpbGwgYmUgdXNlZC4KICAgICAgIFRo aXMgb3B0aW9uIGlzIGFsbG93ZWQgb25seSBpbiA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+ LCBhbmQgb25seSB3aGVuCi0gICAgICBub3QgdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFs PiBmb3JtYXQuCisgICAgICBub3QgdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFsPiBvciA8 bGl0ZXJhbD5qc29uPC9saXRlcmFsPiBmb3JtYXQuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3Rp dGVtPgogICAgPC92YXJsaXN0ZW50cnk+CkBAIC0zMTAsNyArMzE1LDcgQEAgQ09QWSB7IDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxy ZXBsYWNlYWJsZQogICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIDxsaXRlcmFsPk1BVENI PC9saXRlcmFsPiwgdGhlIG51bWJlciBhbmQgbmFtZXMKICAgICAgIG9mIHRoZSBjb2x1bW5zIGlu IHRoZSBoZWFkZXIgbGluZSBtdXN0IG1hdGNoIHRoZSBhY3R1YWwgY29sdW1uIG5hbWVzIG9mCiAg ICAgICB0aGUgdGFibGUsIGluIG9yZGVyOyAgb3RoZXJ3aXNlIGFuIGVycm9yIGlzIHJhaXNlZC4K LSAgICAgIFRoaXMgb3B0aW9uIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXNpbmcgPGxpdGVyYWw+Ymlu YXJ5PC9saXRlcmFsPiBmb3JtYXQuCisgICAgICBUaGlzIG9wdGlvbiBpcyBub3QgYWxsb3dlZCB3 aGVuIHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+anNvbjwvbGl0 ZXJhbD4gZm9ybWF0LgogICAgICAgVGhlIDxsaXRlcmFsPk1BVENIPC9saXRlcmFsPiBvcHRpb24g aXMgb25seSB2YWxpZCBmb3IgPGNvbW1hbmQ+Q09QWQogICAgICAgRlJPTTwvY29tbWFuZD4gY29t bWFuZHMuCiAgICAgIDwvcGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBlN2U3ODE1ODUzLi5jMDIz NGQyMmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC01MzAsNiArNTMwLDggQEAgUHJvY2Vzc0NvcHlP cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlvcHRzX291dC0+Zm9ybWF0ID0gQ09QWV9G T1JNQVRfQ1NWOwogCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImJpbmFyeSIpID09IDApCiAJCQkJ b3B0c19vdXQtPmZvcm1hdCA9IENPUFlfRk9STUFUX0JJTkFSWTsKKwkJCWVsc2UgaWYgKHN0cmNt cChmbXQsICJqc29uIikgPT0gMCkKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID0gQ09QWV9GT1JNQVRf SlNPTjsKIAkJCWVsc2UKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC02OTUsMTYgKzY5NywzMiBAQCBQcm9jZXNz Q29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMg dGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwogCQkJCSBlcnJtc2co ImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIkRFTElNSVRFUiIpKSk7CiAKKwlp ZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9KU09OICYmIG9wdHNfb3V0LT5kZWxp bSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK KwkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4g T05fRVJST1IgKi8KKwkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEpTT04gbW9kZSIs ICJERUxJTUlURVIiKSk7CisKIAlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9C SU5BUlkgJiYgb3B0c19vdXQtPm51bGxfcHJpbnQpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5 ICVzIGluIEJJTkFSWSBtb2RlIiwgIk5VTEwiKSkpOwogCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQg PT0gQ09QWV9GT1JNQVRfSlNPTiAmJiBvcHRzX291dC0+bnVsbF9wcmludCkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQllcnJtc2coImNh bm5vdCBzcGVjaWZ5ICVzIGluIEpTT04gbW9kZSIsICJOVUxMIikpOworCiAJaWYgKG9wdHNfb3V0 LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZICYmIG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50 KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK IAkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJERUZBVUxU IikpKTsKIAorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04gJiYgb3B0 c19vdXQtPmRlZmF1bHRfcHJpbnQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCisJCQkJZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBKU09O IG1vZGUiLCAiREVGQVVMVCIpKTsKKwogCS8qIFNldCBkZWZhdWx0cyBmb3Igb21pdHRlZCBvcHRp b25zICovCiAJaWYgKCFvcHRzX291dC0+ZGVsaW0pCiAJCW9wdHNfb3V0LT5kZWxpbSA9IG9wdHNf b3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWID8gIiwiIDogIlx0IjsKQEAgLTc3NSw2ICs3 OTMsMTEgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJLyotIHRy YW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1Ig Ki8KIAkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJIRUFE RVIiKSkpOwogCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNPTiAmJiBv cHRzX291dC0+aGVhZGVyX2xpbmUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5 ICVzIGluIEpTT04gbW9kZSIsICJIRUFERVIiKSk7CisKIAkvKiBDaGVjayBxdW90ZSAqLwogCWlm IChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiBvcHRzX291dC0+cXVvdGUg IT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTg3OCw2ICs5MDEsMTIgQEAgUHJvY2Vzc0Nv cHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkgZXJybXNnKCJDT1BZICVzIGNhbm5v dCBiZSB1c2VkIHdpdGggJXMiLCAiRlJFRVpFIiwKIAkJCQkJCSJDT1BZIFRPIikpKTsKIAorCS8q IENoZWNrIGpzb24gZm9ybWF0ICAqLworCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9S TUFUX0pTT04gJiYgaXNfZnJvbSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiQ09QWSBqc29uIG1vZGUg Y2Fubm90IGJlIHVzZWQgd2l0aCAlcyIsICJDT1BZIEZST00iKSk7CisKIAlpZiAob3B0c19vdXQt PmRlZmF1bHRfcHJpbnQpCiAJewogCQlpZiAoIWlzX2Zyb20pCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmlu ZGV4IGVhOTBhZjI4YTkuLmQ1ZDFiYzRlYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC0yNCw2 ICsyNCw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVk ZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEv cHFmb3JtYXQuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgpAQCAtMzEsNiArMzIsNyBAQAog I2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJ0 Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCkBAIC0xMzksOSArMTQxLDIwIEBAIFNlbmRDb3B5QmVnaW4oQ29weVRvU3RhdGUg Y3N0YXRlKQogCiAJcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX0NvcHlPdXRSZXNwb25zZSk7 CiAJcHFfc2VuZGJ5dGUoJmJ1ZiwgZm9ybWF0KTsJLyogb3ZlcmFsbCBmb3JtYXQgKi8KLQlwcV9z ZW5kaW50MTYoJmJ1ZiwgbmF0dHMpOwotCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQotCQlw cV9zZW5kaW50MTYoJmJ1ZiwgZm9ybWF0KTsgLyogcGVyLWNvbHVtbiBmb3JtYXRzICovCisJaWYg KGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfSlNPTikKKwl7CisJCXBxX3NlbmRp bnQxNigmYnVmLCBuYXR0cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCQkJcHFf c2VuZGludDE2KCZidWYsIGZvcm1hdCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiBKU09OIGZvcm1hdCBpcyBhbHdheXMgb25lIG5vbi1iaW5hcnkg Y29sdW1uCisJCSAqLworCQlwcV9zZW5kaW50MTYoJmJ1ZiwgMSk7CisJCXBxX3NlbmRpbnQxNigm YnVmLCAwKTsKKwl9CiAJcHFfZW5kbWVzc2FnZSgmYnVmKTsKIAljc3RhdGUtPmNvcHlfZGVzdCA9 IENPUFlfRlJPTlRFTkQ7CiB9CkBAIC05MjEsNyArOTM0LDcgQEAgQ29weU9uZVJvd1RvKENvcHlU b1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJLyogTWFrZSBzdXJlIHRoZSB0 dXBsZSBpcyBmdWxseSBkZWNvbnN0cnVjdGVkICovCiAJc2xvdF9nZXRhbGxhdHRycyhzbG90KTsK IAotCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ICE9IENPUFlfRk9STUFUX0JJTkFSWSkKKwlpZiAo Y3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9URVhUIHx8IGNzdGF0ZS0+b3B0cy5m b3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQogCXsKIAkJYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNl OwogCkBAIC05NDksNyArOTYyLDcgQEAgQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJCQl9CiAJCX0KIAl9Ci0JZWxzZQorCWVsc2UgaWYgKGNz dGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJZm9yZWFjaF9p bnQoYXR0bnVtLCBjc3RhdGUtPmF0dG51bWxpc3QpCiAJCXsKQEAgLTk2OSw2ICs5ODIsMzQgQEAg Q29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJ CQl9CiAJCX0KIAl9CisJZWxzZQorCXsKKwkJRGF0dW0JCXJvd2RhdGE7CisJCVN0cmluZ0luZm8J cmVzdWx0OworCisJCS8qCisJCSAqIGlmIENPUFkgVE8gc291cmNlIGRhdGEgaXMgZnJvbSBhIHF1 ZXJ5LCBub3QgYSBwbGFpbiB0YWJsZSwgdGhlbiB3ZQorCQkgKiBuZWVkIGNvcHkgQ29weVRvU3Rh dGUtPlR1cGxlRGVzYyB0byBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLgorCQkgKiBiZWNhdXNl IHRoZSBzbG90J3MgVHVwbGVEZXNjLT5hdHRycyBtYXkgY2hhbmdlIGR1cmluZyBxdWVyeQorCQkg KiBleGVjdXRpb24uCisJCSovCisJCWlmKCFjc3RhdGUtPnJlbCkKKwkJeworCQkJbWVtY3B5KFR1 cGxlRGVzY0F0dHIoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvciwgMCksCisJCQkJICAgVHVwbGVE ZXNjQXR0cihjc3RhdGUtPnF1ZXJ5RGVzYy0+dHVwRGVzYywgMCksCisJCQkJICAgY3N0YXRlLT5x dWVyeURlc2MtPnR1cERlc2MtPm5hdHRzICogc2l6ZW9mKEZvcm1EYXRhX3BnX2F0dHJpYnV0ZSkp OworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGNzdGF0ZS0+cXVlcnlEZXNjLT50dXBEZXNjLT5u YXR0czsgaSsrKQorCQkJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHNsb3QtPnR0c190dXBs ZURlc2NyaXB0b3IsIGkpOworCisJCQlCbGVzc1R1cGxlRGVzYyhzbG90LT50dHNfdHVwbGVEZXNj cmlwdG9yKTsKKwkJfQorCQlyb3dkYXRhID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZURhdHVtKHNs b3QpOworCQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCQljb21wb3NpdGVfdG9fanNvbihy b3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKKworCQlDb3B5U2VuZERhdGEoY3N0YXRlLCByZXN1bHQt PmRhdGEsIHJlc3VsdC0+bGVuKTsKKwl9CiAKIAlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CmluZGV4IGQ3ZjljMDBjNDAuLmNmY2IyMDBiNmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAt MzQ2NSw2ICszNDY1LDEwIEBAIGNvcHlfb3B0X2l0ZW06CiAJCQkJewogCQkJCQkkJCA9IG1ha2VE ZWZFbGVtKCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJjc3YiKSwgQDEpOwogCQkJCX0K KwkJCXwgSlNPTgorCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0IiwgKE5vZGUg KikgbWFrZVN0cmluZygianNvbiIpLCBAMSk7CisJCQkJfQogCQkJfCBIRUFERVJfUAogCQkJCXsK IAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiaGVhZGVyIiwgKE5vZGUgKikgbWFrZUJvb2xlYW4odHJ1 ZSksIEAxKTsKQEAgLTM1NDcsNiArMzU1MSwxMCBAQCBjb3B5X2dlbmVyaWNfb3B0X2VsZW06CiAJ CQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCQxLCAkMiwgQDEpOwogCQkJCX0KKwkJCXwgRk9S TUFUX0xBIGNvcHlfZ2VuZXJpY19vcHRfYXJnCisJCQl7CisJCQkJJCQgPSBtYWtlRGVmRWxlbSgi Zm9ybWF0IiwgJDIsIEAxKTsKKwkJCX0KIAkJOwogCiBjb3B5X2dlbmVyaWNfb3B0X2FyZzoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbi5jCmluZGV4IDUxNDUyNzU1ZjUuLmJmNjkzNDdmYTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b24uYwpAQCAtODUsOCArODUsNiBAQCB0eXBlZGVmIHN0cnVjdCBKc29uQWdnU3RhdGUKIAlKc29u VW5pcXVlQnVpbGRlclN0YXRlIHVuaXF1ZV9jaGVjazsKIH0gSnNvbkFnZ1N0YXRlOwogCi1zdGF0 aWMgdm9pZCBjb21wb3NpdGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVz dWx0LAotCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVkcyk7CiBzdGF0aWMgdm9pZCBhcnJheV9k aW1fdG9fanNvbihTdHJpbmdJbmZvIHJlc3VsdCwgaW50IGRpbSwgaW50IG5kaW1zLCBpbnQgKmRp bXMsCiAJCQkJCQkJICBEYXR1bSAqdmFscywgYm9vbCAqbnVsbHMsIGludCAqdmFsY291bnQsCiAJ CQkJCQkJICBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQsCkBAIC01 MTYsOCArNTE0LDkgQEAgYXJyYXlfdG9fanNvbl9pbnRlcm5hbChEYXR1bSBhcnJheSwgU3RyaW5n SW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVfZmVlZHMpCiAKIC8qCiAgKiBUdXJuIGEgY29tcG9z aXRlIC8gcmVjb3JkIGludG8gSlNPTi4KKyAqIEV4cG9ydGVkIHNvIENPUFkgVE8gY2FuIHVzZSBp dC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBv c2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVfZmVlZHMpCiB7CiAJSGVhcFR1 cGxlSGVhZGVyIHRkOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5j IGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDgxY2JmMTBhYTIuLjVmYjVj YjJkYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9z cmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTMyNTQsNyArMzI1NCw3IEBAIG1hdGNo X3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCiAJLyogQ29tcGxldGUgQ09QWSA8c3Ro PiBGUk9NfFRPIGZpbGVuYW1lIFdJVEggKEZPUk1BVCAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkNP UFl8XFxjb3B5IiwgTWF0Y2hBbnksICJGUk9NfFRPIiwgTWF0Y2hBbnksICJXSVRIIiwgIigiLCAi Rk9STUFUIikpCi0JCUNPTVBMRVRFX1dJVEgoImJpbmFyeSIsICJjc3YiLCAidGV4dCIpOworCQlD T01QTEVURV9XSVRIKCJiaW5hcnkiLCAiY3N2IiwgInRleHQiLCAianNvbiIpOwogCiAJLyogQ29t cGxldGUgQ09QWSA8c3RoPiBGUk9NIGZpbGVuYW1lIFdJVEggKE9OX0VSUk9SICovCiAJZWxzZSBp ZiAoTWF0Y2hlcygiQ09QWXxcXGNvcHkiLCBNYXRjaEFueSwgIkZST018VE8iLCBNYXRjaEFueSwg IldJVEgiLCAiKCIsICJPTl9FUlJPUiIpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCmluZGV4IDdhMWVlNjU2MDEu LjA3ZmNjMmJjOWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTU5LDYgKzU5LDcgQEAgdHlwZWRlZiBl bnVtIENvcHlGb3JtYXQKIAlDT1BZX0ZPUk1BVF9URVhUID0gMCwKIAlDT1BZX0ZPUk1BVF9CSU5B UlksCiAJQ09QWV9GT1JNQVRfQ1NWLAorCUNPUFlfRk9STUFUX0pTT04sCiB9IENvcHlGb3JtYXQ7 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uLmggYi9zcmMvaW5jbHVk ZS91dGlscy9qc29uLmgKaW5kZXggNDliYmRhN2FjMC4uMWZhOGUyY2U4ZSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaApA QCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAKIC8qIGZ1bmN0 aW9ucyBpbiBqc29uLmMgKi8KK2V4dGVybiB2b2lkIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNv bXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsCisJCQkJCQkJICBib29sIHVzZV9saW5lX2ZlZWRz KTsKIGV4dGVybiB2b2lkIGVzY2FwZV9qc29uKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpz dHIpOwogZXh0ZXJuIHZvaWQgZXNjYXBlX2pzb25fd2l0aF9sZW4oU3RyaW5nSW5mbyBidWYsIGNv bnN0IGNoYXIgKnN0ciwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBlc2NhcGVfanNvbl90ZXh0KFN0 cmluZ0luZm8gYnVmLCBjb25zdCB0ZXh0ICp0eHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5v dXQKaW5kZXggZjU1NGQ0MmM4NC4uYjQ0NzliYzcyYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb3B5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv cHkub3V0CkBAIC03Myw2ICs3Myw4MCBAQCBjb3B5IGNvcHl0ZXN0MyB0byBzdGRvdXQgY3N2IGhl YWRlcjsKIGMxLCJjb2wgd2l0aCAsIGNvbW1hIiwiY29sIHdpdGggIiIgcXVvdGUiCiAxLGEsMQog MixiLDIKKy0tLSB0ZXN0IGNvcHlpbmcgaW4gSlNPTiBtb2RlIHdpdGggdmFyaW91cyBzdHlsZXMK K2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IGpzb247Cit7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFi Y1xyXG5kZWYiLCJmaWxsZXIiOjF9Cit7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIs ImZpbGxlciI6Mn0KK3sic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9 Cit7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6 NH0KK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbik7Cit7InN0eWxlIjoiRE9T IiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxsZXIiOjF9Cit7InN0eWxlIjoiVW5peCIsInRlc3Qi OiJhYmNcbmRlZiIsImZpbGxlciI6Mn0KK3sic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYi LCJmaWxsZXIiOjN9Cit7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxu YiIsImZpbGxlciI6NH0KKy0tIGFsbCBvZiB0aGUgZm9sbG93aW5nIHNob3VsZCB5aWVsZCBlcnJv cgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBkZWxpbWl0ZXIgJ3wnKTsK K0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgREVMSU1JVEVSIGluIEpTT04gbW9kZQorY29weSBjb3B5 dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBudWxsICdcTicpOworRVJST1I6ICBjYW5ub3Qg c3BlY2lmeSBOVUxMIGluIEpTT04gbW9kZQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1h dCBqc29uLCBkZWZhdWx0ICd8Jyk7CitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IERFRkFVTFQgaW4g SlNPTiBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGhlYWRlcik7 CitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBKU09OIG1vZGUKK2NvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgcXVvdGUgJyInKTsKK0VSUk9SOiAgQ09QWSBRVU9U RSByZXF1aXJlcyBDU1YgbW9kZQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29u LCBlc2NhcGUgJyInKTsKK0VSUk9SOiAgQ09QWSBFU0NBUEUgcmVxdWlyZXMgQ1NWIG1vZGUKK2Nv cHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfcXVvdGUgKik7CitFUlJP UjogIENPUFkgRk9SQ0VfUVVPVEUgcmVxdWlyZXMgQ1NWIG1vZGUKK2NvcHkgY29weXRlc3QgdG8g c3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2Vfbm90X251bGwgKik7CitFUlJPUjogIENPUFkgRk9S Q0VfTk9UX05VTEwgcmVxdWlyZXMgQ1NWIG1vZGUKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChm b3JtYXQganNvbiwgZm9yY2VfbnVsbCAqKTsKK0VSUk9SOiAgQ09QWSBGT1JDRV9OVUxMIHJlcXVp cmVzIENTViBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIG9uX2Vy cm9yIGlnbm9yZSk7CitFUlJPUjogIENPUFkgT05fRVJST1IgY2Fubm90IGJlIHVzZWQgd2l0aCBD T1BZIFRPCitMSU5FIDE6IGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgb25f ZXJyb3IgaWdub3JlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBeCitjb3B5IGNvcHl0ZXN0IGZyb20gc3RkaW4oZm9ybWF0IGpzb24pOworRVJST1I6ICBD T1BZIGpzb24gbW9kZSBjYW5ub3QgYmUgdXNlZCB3aXRoIENPUFkgRlJPTQorLS0gYWxsIG9mIHRo ZSBhYm92ZSBzaG91bGQgeWllbGQgZXJyb3IKKy0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVy cworY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBiaWdzZXJpYWwsCisg ICAgZjEgdGV4dCwKKyAgICBmMiB0aW1lc3RhbXB0eik7CitpbnNlcnQgaW50byBjb3B5anNvbnRl c3QKKyAgc2VsZWN0IGcuaSwKKyAgICAgICAgIENBU0UgV0hFTiBnLmkgJSAyID0gMCBUSEVOCisg ICAgICAgICAgICdsaW5lIHdpdGggJycgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAgICBF TFNFCisgICAgICAgICAgICdsaW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAg ICAgIEVORCwKKyAgICAgICAgICdNb24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNUJworICBmcm9t IGdlbmVyYXRlX3NlcmllcygxLDUpIGFzIGcoaSk7CitpbnNlcnQgaW50byBjb3B5anNvbnRlc3Qg KGYxKSB2YWx1ZXMKKyhFJ2FhYVwiYmJiJzo6dGV4dCksCisoRSdhYWFcXGJiYic6OnRleHQpLAor KEUnYWFhXC9iYmInOjp0ZXh0KSwKKyhFJ2FhYVxiYmJiJzo6dGV4dCksCisoRSdhYWFcZmJiYic6 OnRleHQpLAorKEUnYWFhXG5iYmInOjp0ZXh0KSwKKyhFJ2FhYVxyYmJiJzo6dGV4dCksCisoRSdh YWFcdGJiYic6OnRleHQpOworY29weSBjb3B5anNvbnRlc3QgdG8gc3Rkb3V0IGpzb247Cit7Imlk IjoxLCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMSIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjow MS0wODowMCJ9Cit7ImlkIjoyLCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiAyIiwiZjIiOiIxOTk3 LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjMsImYxIjoibGluZSB3aXRoIFwiIGluIGl0 OiAzIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjQsImYxIjoibGlu ZSB3aXRoICcgaW4gaXQ6IDQiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQoreyJp ZCI6NSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDUiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6 MDEtMDg6MDAifQoreyJpZCI6MSwiZjEiOiJhYWFcImJiYiIsImYyIjpudWxsfQoreyJpZCI6Miwi ZjEiOiJhYWFcXGJiYiIsImYyIjpudWxsfQoreyJpZCI6MywiZjEiOiJhYWEvYmJiIiwiZjIiOm51 bGx9Cit7ImlkIjo0LCJmMSI6ImFhYVxiYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo1LCJmMSI6ImFh YVxmYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo2LCJmMSI6ImFhYVxuYmJiIiwiZjIiOm51bGx9Cit7 ImlkIjo3LCJmMSI6ImFhYVxyYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo4LCJmMSI6ImFhYVx0YmJi IiwiZjIiOm51bGx9CiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5dGVzdDQgKAogCWMxIGludCwKIAki Y29sbmFtZSB3aXRoIHRhYjogCSIgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb3B5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCmluZGV4IGYxNjk5 YjY2YjAuLjA1NGZjZTk1Y2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHku c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCkBAIC04Miw2ICs4Miw1MyBA QCB0aGlzIGlzIGp1c3QgYSBsaW5lIGZ1bGwgb2YganVuayB0aGF0IHdvdWxkIGVycm9yIG91dCBp ZiBwYXJzZWQKIAogY29weSBjb3B5dGVzdDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7CiAKKy0tLSB0 ZXN0IGNvcHlpbmcgaW4gSlNPTiBtb2RlIHdpdGggdmFyaW91cyBzdHlsZXMKK2NvcHkgY29weXRl c3QgdG8gc3Rkb3V0IGpzb247CisKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNv bik7CisKKy0tIGFsbCBvZiB0aGUgZm9sbG93aW5nIHNob3VsZCB5aWVsZCBlcnJvcgorY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBkZWxpbWl0ZXIgJ3wnKTsKK2NvcHkgY29w eXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgbnVsbCAnXE4nKTsKK2NvcHkgY29weXRlc3Qg dG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZGVmYXVsdCAnfCcpOworY29weSBjb3B5dGVzdCB0byBz dGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZv cm1hdCBqc29uLCBxdW90ZSAnIicpOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBq c29uLCBlc2NhcGUgJyInKTsKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwg Zm9yY2VfcXVvdGUgKik7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZv cmNlX25vdF9udWxsICopOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBm b3JjZV9udWxsICopOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBvbl9l cnJvciBpZ25vcmUpOworY29weSBjb3B5dGVzdCBmcm9tIHN0ZGluKGZvcm1hdCBqc29uKTsKKy0t IGFsbCBvZiB0aGUgYWJvdmUgc2hvdWxkIHlpZWxkIGVycm9yCisKKy0tIGVtYmVkZGVkIGVzY2Fw ZWQgY2hhcmFjdGVycworY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBi aWdzZXJpYWwsCisgICAgZjEgdGV4dCwKKyAgICBmMiB0aW1lc3RhbXB0eik7CisKK2luc2VydCBp bnRvIGNvcHlqc29udGVzdAorICBzZWxlY3QgZy5pLAorICAgICAgICAgQ0FTRSBXSEVOIGcuaSAl IDIgPSAwIFRIRU4KKyAgICAgICAgICAgJ2xpbmUgd2l0aCAnJyBpbiBpdDogJyB8fCBnLmk6OnRl eHQKKyAgICAgICAgIEVMU0UKKyAgICAgICAgICAgJ2xpbmUgd2l0aCAiIGluIGl0OiAnIHx8IGcu aTo6dGV4dAorICAgICAgICAgRU5ELAorICAgICAgICAgJ01vbiBGZWIgMTAgMTc6MzI6MDEgMTk5 NyBQU1QnCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgYXMgZyhpKTsKKworaW5zZXJ0IGlu dG8gY29weWpzb250ZXN0IChmMSkgdmFsdWVzCisoRSdhYWFcImJiYic6OnRleHQpLAorKEUnYWFh XFxiYmInOjp0ZXh0KSwKKyhFJ2FhYVwvYmJiJzo6dGV4dCksCisoRSdhYWFcYmJiYic6OnRleHQp LAorKEUnYWFhXGZiYmInOjp0ZXh0KSwKKyhFJ2FhYVxuYmJiJzo6dGV4dCksCisoRSdhYWFccmJi Yic6OnRleHQpLAorKEUnYWFhXHRiYmInOjp0ZXh0KTsKKworY29weSBjb3B5anNvbnRlc3QgdG8g c3Rkb3V0IGpzb247CisKIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHl0ZXN0NCAoCiAJYzEgaW50LAog CSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsKLS0gCjIuMzQuMQoK --00000000000083bf13062cabb353 Content-Type: text/x-patch; charset="US-ASCII"; name="v14-0001-Introduce-CopyFormat-and-replace-csv_mode-and-bi.patch" Content-Disposition: attachment; filename="v14-0001-Introduce-CopyFormat-and-replace-csv_mode-and-bi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6erwnqs2 RnJvbSA3ZjQ3NTU1NGE1NDRiMWUwMzE1MjJlMjE0Nzc3MzEyODZkZWI5OTE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9yZz4KRGF0 ZTogVGh1LCAyNCBPY3QgMjAyNCAwODoyNDoxMyArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEv M10gSW50cm9kdWNlIENvcHlGb3JtYXQgYW5kIHJlcGxhY2UgY3N2X21vZGUgYW5kIGJpbmFyeQog ZmllbGRzIHdpdGggaXQuCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAg ICB8IDUwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tLmMgICAgICB8IDEwICsrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b21wYXJzZS5jIHwgMzQgKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weXRvLmMgICAgICAgIHwgMjAgKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2Nv cHkuaCAgICAgICAgICB8IDEzICsrKysrKy0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKyksIDU4IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBjZmNhOWQ5ZGMyLi5lN2U3ODE1ODUzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weS5jCkBAIC01MjUsMTEgKzUyNSwxMSBAQCBQcm9jZXNzQ29weU9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBw c3RhdGUpOwogCQkJZm9ybWF0X3NwZWNpZmllZCA9IHRydWU7CiAJCQlpZiAoc3RyY21wKGZtdCwg InRleHQiKSA9PSAwKQotCQkJCSAvKiBkZWZhdWx0IGZvcm1hdCAqLyA7CisJCQkJb3B0c19vdXQt PmZvcm1hdCA9IENPUFlfRk9STUFUX1RFWFQ7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAiY3N2 IikgPT0gMCkKLQkJCQlvcHRzX291dC0+Y3N2X21vZGUgPSB0cnVlOworCQkJCW9wdHNfb3V0LT5m b3JtYXQgPSBDT1BZX0ZPUk1BVF9DU1Y7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAiYmluYXJ5 IikgPT0gMCkKLQkJCQlvcHRzX291dC0+YmluYXJ5ID0gdHJ1ZTsKKwkJCQlvcHRzX291dC0+Zm9y bWF0ID0gQ09QWV9GT1JNQVRfQklOQVJZOwogCQkJZWxzZQogCQkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTY4OSwz MSArNjg5LDMxIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJICog Q2hlY2sgZm9yIGluY29tcGF0aWJsZSBvcHRpb25zIChtdXN0IGRvIHRoZXNlIHRocmVlIGJlZm9y ZSBpbnNlcnRpbmcKIAkgKiBkZWZhdWx0cykKIAkgKi8KLQlpZiAob3B0c19vdXQtPmJpbmFyeSAm JiBvcHRzX291dC0+ZGVsaW0pCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRf QklOQVJZICYmIG9wdHNfb3V0LT5kZWxpbSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFt ZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCiAJCQkJIGVycm1zZygiY2Fubm90 IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiREVMSU1JVEVSIikpKTsKIAotCWlmIChvcHRz X291dC0+YmluYXJ5ICYmIG9wdHNfb3V0LT5udWxsX3ByaW50KQorCWlmIChvcHRzX291dC0+Zm9y bWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+bnVsbF9wcmludCkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVy cm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiTlVMTCIpKSk7CiAKLQlp ZiAob3B0c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+ZGVmYXVsdF9wcmludCkKKwlpZiAob3B0 c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYgb3B0c19vdXQtPmRlZmF1bHRf cHJpbnQpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIkRF RkFVTFQiKSkpOwogCiAJLyogU2V0IGRlZmF1bHRzIGZvciBvbWl0dGVkIG9wdGlvbnMgKi8KIAlp ZiAoIW9wdHNfb3V0LT5kZWxpbSkKLQkJb3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQtPmNzdl9t b2RlID8gIiwiIDogIlx0IjsKKwkJb3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQtPmZvcm1hdCA9 PSBDT1BZX0ZPUk1BVF9DU1YgPyAiLCIgOiAiXHQiOwogCiAJaWYgKCFvcHRzX291dC0+bnVsbF9w cmludCkKLQkJb3B0c19vdXQtPm51bGxfcHJpbnQgPSBvcHRzX291dC0+Y3N2X21vZGUgPyAiIiA6 ICJcXE4iOworCQlvcHRzX291dC0+bnVsbF9wcmludCA9IG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09Q WV9GT1JNQVRfQ1NWID8gIiIgOiAiXFxOIjsKIAlvcHRzX291dC0+bnVsbF9wcmludF9sZW4gPSBz dHJsZW4ob3B0c19vdXQtPm51bGxfcHJpbnQpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3ZfbW9kZSkK KwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YpCiAJewogCQlpZiAoIW9w dHNfb3V0LT5xdW90ZSkKIAkJCW9wdHNfb3V0LT5xdW90ZSA9ICJcIiI7CkBAIC03NjEsNyArNzYx LDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKiBmdXR1cmUt cHJvb2ZpbmcuICBMaWtld2lzZSB3ZSBkaXNhbGxvdyBhbGwgZGlnaXRzIHRob3VnaCBvbmx5IG9j dGFsCiAJICogZGlnaXRzIGFyZSBhY3R1YWxseSBkYW5nZXJvdXMuCiAJICovCi0JaWYgKCFvcHRz X291dC0+Y3N2X21vZGUgJiYKKwlpZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9D U1YgJiYKIAkJc3RyY2hyKCJcXC5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODki LAogCQkJICAgb3B0c19vdXQtPmRlbGltWzBdKSAhPSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLApA QCAtNzY5LDQzICs3NjksNDQgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJCQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBjYW5ub3QgYmUgXCIlc1wiIiwgb3B0c19v dXQtPmRlbGltKSkpOwogCiAJLyogQ2hlY2sgaGVhZGVyICovCi0JaWYgKG9wdHNfb3V0LT5iaW5h cnkgJiYgb3B0c19vdXQtPmhlYWRlcl9saW5lKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENP UFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+aGVhZGVyX2xpbmUpCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0g dHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJP UiAqLwogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIkhF QURFUiIpKSk7CiAKIAkvKiBDaGVjayBxdW90ZSAqLwotCWlmICghb3B0c19vdXQtPmNzdl9tb2Rl ICYmIG9wdHNfb3V0LT5xdW90ZSAhPSBOVUxMKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENP UFlfRk9STUFUX0NTViAmJiBvcHRzX291dC0+cXVvdGUgIT0gTlVMTCkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0 cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9S ICovCiAJCQkJIGVycm1zZygiQ09QWSAlcyByZXF1aXJlcyBDU1YgbW9kZSIsICJRVU9URSIpKSk7 CiAKLQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmIHN0cmxlbihvcHRzX291dC0+cXVvdGUpICE9 IDEpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmIHN0cmxlbihv cHRzX291dC0+cXVvdGUpICE9IDEpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIkNPUFkgcXVvdGUgbXVz dCBiZSBhIHNpbmdsZSBvbmUtYnl0ZSBjaGFyYWN0ZXIiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5j c3ZfbW9kZSAmJiBvcHRzX291dC0+ZGVsaW1bMF0gPT0gb3B0c19vdXQtPnF1b3RlWzBdKQorCWlm IChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTViAmJiBvcHRzX291dC0+ZGVsaW1b MF0gPT0gb3B0c19vdXQtPnF1b3RlWzBdKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coIkNPUFkgZGVs aW1pdGVyIGFuZCBxdW90ZSBtdXN0IGJlIGRpZmZlcmVudCIpKSk7CiAKIAkvKiBDaGVjayBlc2Nh cGUgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+ZXNjYXBlICE9IE5V TEwpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0 LT5lc2NhcGUgIT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFt ZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCiAJCQkJIGVycm1zZygiQ09QWSAl cyByZXF1aXJlcyBDU1YgbW9kZSIsICJFU0NBUEUiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3Zf bW9kZSAmJiBzdHJsZW4ob3B0c19vdXQtPmVzY2FwZSkgIT0gMSkKKwlpZiAob3B0c19vdXQtPmZv cm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YgJiYgc3RybGVuKG9wdHNfb3V0LT5lc2NhcGUpICE9IDEp CiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAogCQkJCSBlcnJtc2coIkNPUFkgZXNjYXBlIG11c3QgYmUgYSBzaW5nbGUgb25lLWJ5 dGUgY2hhcmFjdGVyIikpKTsKIAogCS8qIENoZWNrIGZvcmNlX3F1b3RlICovCi0JaWYgKCFvcHRz X291dC0+Y3N2X21vZGUgJiYgKG9wdHNfb3V0LT5mb3JjZV9xdW90ZSB8fCBvcHRzX291dC0+Zm9y Y2VfcXVvdGVfYWxsKSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1Yg JiYgKG9wdHNfb3V0LT5mb3JjZV9xdW90ZSB8fAorCQkJCQkJCQkJCQkJb3B0c19vdXQtPmZvcmNl X3F1b3RlX2FsbCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2Yg YSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwpAQCAtODE5LDggKzgyMCw4IEBAIFByb2Nl c3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkiQ09QWSBGUk9NIikpKTsK IAogCS8qIENoZWNrIGZvcmNlX25vdG51bGwgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAm JiAob3B0c19vdXQtPmZvcmNlX25vdG51bGwgIT0gTklMIHx8Ci0JCQkJCQkJCW9wdHNfb3V0LT5m b3JjZV9ub3RudWxsX2FsbCkpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRf Q1NWICYmCisJCShvcHRzX291dC0+Zm9yY2Vfbm90bnVsbCAhPSBOSUwgfHwgb3B0c19vdXQtPmZv cmNlX25vdG51bGxfYWxsKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFt ZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCkBAIC04MzUsOCArODM2LDggQEAg UHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSJDT1BZIFRPIikp KTsKIAogCS8qIENoZWNrIGZvcmNlX251bGwgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAm JiAob3B0c19vdXQtPmZvcmNlX251bGwgIT0gTklMIHx8Ci0JCQkJCQkJCW9wdHNfb3V0LT5mb3Jj ZV9udWxsX2FsbCkpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYm IChvcHRzX291dC0+Zm9yY2VfbnVsbCAhPSBOSUwgfHwKKwkJCQkJCQkJCQkJCW9wdHNfb3V0LT5m b3JjZV9udWxsX2FsbCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUg b2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwpAQCAtODYwLDcgKzg2MSw3IEBAIFBy b2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkiTlVMTCIpKSk7CiAK IAkvKiBEb24ndCBhbGxvdyB0aGUgQ1NWIHF1b3RlIGNoYXIgdG8gYXBwZWFyIGluIHRoZSBudWxs IHN0cmluZy4gKi8KLQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmCisJaWYgKG9wdHNfb3V0LT5m b3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmCiAJCXN0cmNocihvcHRzX291dC0+bnVsbF9wcmlu dCwgb3B0c19vdXQtPnF1b3RlWzBdKSAhPSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLApAQCAtODk2LDcgKzg5Nyw3 IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJIkRFRkFV TFQiKSkpOwogCiAJCS8qIERvbid0IGFsbG93IHRoZSBDU1YgcXVvdGUgY2hhciB0byBhcHBlYXIg aW4gdGhlIGRlZmF1bHQgc3RyaW5nLiAqLwotCQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmCisJ CWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTViAmJgogCQkJc3RyY2hyKG9w dHNfb3V0LT5kZWZhdWx0X3ByaW50LCBvcHRzX291dC0+cXVvdGVbMF0pICE9IE5VTEwpCiAJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCkBAIC05MTMsNyArOTE0LDggQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJIGVycm1zZygiTlVMTCBzcGVjaWZpY2F0aW9uIGFuZCBERUZBVUxUIHNwZWNp ZmljYXRpb24gY2Fubm90IGJlIHRoZSBzYW1lIikpKTsKIAl9CiAJLyogQ2hlY2sgb25fZXJyb3Ig Ki8KLQlpZiAob3B0c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+b25fZXJyb3IgIT0gQ09QWV9P Tl9FUlJPUl9TVE9QKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFS WSAmJgorCQlvcHRzX291dC0+b25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9TVE9QKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJy bXNnKCJvbmx5IE9OX0VSUk9SIFNUT1AgaXMgYWxsb3dlZCBpbiBCSU5BUlkgbW9kZSIpKSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weWZyb20uYwppbmRleCAwY2JkMDVmNTYwLi5hZWE4MDdkMTNjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tLmMKQEAgLTEyMiw3ICsxMjIsNyBAQCBDb3B5RnJvbUVycm9yQ2FsbGJh Y2sodm9pZCAqYXJnKQogCQkJCSAgIGNzdGF0ZS0+Y3VyX3JlbG5hbWUpOwogCQlyZXR1cm47CiAJ fQotCWlmIChjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09 IENPUFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qIGNhbid0IHVzZWZ1bGx5IGRpc3BsYXkgdGhl IGRhdGEgKi8KIAkJaWYgKGNzdGF0ZS0+Y3VyX2F0dG5hbWUpCkBAIC0xNTgzLDcgKzE1ODMsNyBA QCBCZWdpbkNvcHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAljc3RhdGUtPnJhd19idWZfaW5k ZXggPSBjc3RhdGUtPnJhd19idWZfbGVuID0gMDsKIAljc3RhdGUtPnJhd19yZWFjaGVkX2VvZiA9 IGZhbHNlOwogCi0JaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMu Zm9ybWF0ICE9IENPUFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qCiAJCSAqIElmIGVuY29kaW5n IGNvbnZlcnNpb24gaXMgbmVlZGVkLCB3ZSBuZWVkIGFub3RoZXIgYnVmZmVyIHRvIGhvbGQKQEAg LTE2MzQsNyArMTYzNCw3IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJ Y29udGludWU7CiAKIAkJLyogRmV0Y2ggdGhlIGlucHV0IGZ1bmN0aW9uIGFuZCB0eXBpb3BhcmFt IGluZm8gKi8KLQkJaWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJCWlmIChjc3RhdGUtPm9wdHMu Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkKIAkJCWdldFR5cGVCaW5hcnlJbnB1dEluZm8o YXR0LT5hdHR0eXBpZCwKIAkJCQkJCQkJICAgJmluX2Z1bmNfb2lkLCAmdHlwaW9wYXJhbXNbYXR0 bnVtIC0gMV0pOwogCQllbHNlCkBAIC0xNzc1LDE0ICsxNzc1LDE0IEBAIEJlZ2luQ29weUZyb20o UGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJh bSgzLCBwcm9ncmVzc19jb2xzLCBwcm9ncmVzc192YWxzKTsKIAotCWlmIChjc3RhdGUtPm9wdHMu YmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkK IAl7CiAJCS8qIFJlYWQgYW5kIHZlcmlmeSBiaW5hcnkgaGVhZGVyICovCiAJCVJlY2VpdmVDb3B5 QmluYXJ5SGVhZGVyKGNzdGF0ZSk7CiAJfQogCiAJLyogY3JlYXRlIHdvcmtzcGFjZSBmb3IgQ29w eVJlYWRBdHRyaWJ1dGVzIHJlc3VsdHMgKi8KLQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJ aWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJQXR0 ck51bWJlcglhdHRyX2NvdW50ID0gbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCmluZGV4IGNhY2NkYzg1NjMuLjViNTZhYTg5 ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKQEAgLTE2Miw3ICsxNjIsNyBA QCBSZWNlaXZlQ29weUJlZ2luKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogewogCVN0cmluZ0luZm9E YXRhIGJ1ZjsKIAlpbnQJCQluYXR0cyA9IGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCk7 Ci0JaW50MTYJCWZvcm1hdCA9IChjc3RhdGUtPm9wdHMuYmluYXJ5ID8gMSA6IDApOworCWludDE2 CQlmb3JtYXQgPSAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgPyAx IDogMCk7CiAJaW50CQkJaTsKIAogCXBxX2JlZ2lubWVzc2FnZSgmYnVmLCBQcU1zZ19Db3B5SW5S ZXNwb25zZSk7CkBAIC03NDgsNyArNzQ4LDcgQEAgTmV4dENvcHlGcm9tUmF3RmllbGRzKENvcHlG cm9tU3RhdGUgY3N0YXRlLCBjaGFyICoqKmZpZWxkcywgaW50ICpuZmllbGRzKQogCWJvb2wJCWRv bmU7CiAKIAkvKiBvbmx5IGF2YWlsYWJsZSBmb3IgdGV4dCBvciBjc3YgaW5wdXQgKi8KLQlBc3Nl cnQoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpOworCUFzc2VydChjc3RhdGUtPm9wdHMuZm9ybWF0ICE9 IENPUFlfRk9STUFUX0JJTkFSWSk7CiAKIAkvKiBvbiBpbnB1dCBjaGVjayB0aGF0IHRoZSBoZWFk ZXIgbGluZSBpcyBjb3JyZWN0IGlmIG5lZWRlZCAqLwogCWlmIChjc3RhdGUtPmN1cl9saW5lbm8g PT0gMCAmJiBjc3RhdGUtPm9wdHMuaGVhZGVyX2xpbmUpCkBAIC03NjUsNyArNzY1LDcgQEAgTmV4 dENvcHlGcm9tUmF3RmllbGRzKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBjaGFyICoqKmZpZWxkcywg aW50ICpuZmllbGRzKQogCQl7CiAJCQlpbnQJCQlmbGRudW07CiAKLQkJCWlmIChjc3RhdGUtPm9w dHMuY3N2X21vZGUpCisJCQlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9D U1YpCiAJCQkJZmxkY3QgPSBDb3B5UmVhZEF0dHJpYnV0ZXNDU1YoY3N0YXRlKTsKIAkJCWVsc2UK IAkJCQlmbGRjdCA9IENvcHlSZWFkQXR0cmlidXRlc1RleHQoY3N0YXRlKTsKQEAgLTgyMCw3ICs4 MjAsNyBAQCBOZXh0Q29weUZyb21SYXdGaWVsZHMoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGNoYXIg KioqZmllbGRzLCBpbnQgKm5maWVsZHMpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIFBhcnNlIHRo ZSBsaW5lIGludG8gZGUtZXNjYXBlZCBmaWVsZCB2YWx1ZXMgKi8KLQlpZiAoY3N0YXRlLT5vcHRz LmNzdl9tb2RlKQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikK IAkJZmxkY3QgPSBDb3B5UmVhZEF0dHJpYnV0ZXNDU1YoY3N0YXRlKTsKIAllbHNlCiAJCWZsZGN0 ID0gQ29weVJlYWRBdHRyaWJ1dGVzVGV4dChjc3RhdGUpOwpAQCAtODY0LDcgKzg2NCw3IEBAIE5l eHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAog CU1lbVNldChudWxscywgdHJ1ZSwgbnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoYm9vbCkpOwogCU1l bVNldChjc3RhdGUtPmRlZmF1bHRzLCBmYWxzZSwgbnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoYm9v bCkpOwogCi0JaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9y bWF0ICE9IENPUFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCWNoYXIJICAqKmZpZWxkX3N0cmluZ3M7 CiAJCUxpc3RDZWxsICAgKmN1cjsKQEAgLTkwNSw3ICs5MDUsNyBAQCBOZXh0Q29weUZyb20oQ29w eUZyb21TdGF0ZSBjc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKIAkJCQljb250aW51ZTsK IAkJCX0KIAotCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkKKwkJCWlmIChjc3RhdGUtPm9w dHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJCXsKIAkJCQlpZiAoc3RyaW5nID09IE5V TEwgJiYKIAkJCQkJY3N0YXRlLT5vcHRzLmZvcmNlX25vdG51bGxfZmxhZ3NbbV0pCkBAIC0xMTc4 LDcgKzExNzgsNyBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCWNo YXIJCXF1b3RlYyA9ICdcMCc7CiAJY2hhcgkJZXNjYXBlYyA9ICdcMCc7CiAKLQlpZiAoY3N0YXRl LT5vcHRzLmNzdl9tb2RlKQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFU X0NTVikKIAl7CiAJCXF1b3RlYyA9IGNzdGF0ZS0+b3B0cy5xdW90ZVswXTsKIAkJZXNjYXBlYyA9 IGNzdGF0ZS0+b3B0cy5lc2NhcGVbMF07CkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBDb3B5UmVhZExp bmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQlwcmV2X3Jhd19wdHIgPSBpbnB1dF9idWZf cHRyOwogCQljID0gY29weV9pbnB1dF9idWZbaW5wdXRfYnVmX3B0cisrXTsKIAotCQlpZiAoY3N0 YXRlLT5vcHRzLmNzdl9tb2RlKQorCQlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZP Uk1BVF9DU1YpCiAJCXsKIAkJCS8qCiAJCQkgKiBJZiBjaGFyYWN0ZXIgaXMgJ1xyJywgd2UgbWF5 IG5lZWQgdG8gbG9vayBhaGVhZCBiZWxvdy4gIEZvcmNlCkBAIC0xMjk0LDcgKzEyOTQsNyBAQCBD b3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQl9CiAKIAkJLyogUHJvY2Vz cyBcciAqLwotCQlpZiAoYyA9PSAnXHInICYmICghY3N0YXRlLT5vcHRzLmNzdl9tb2RlIHx8ICFp bl9xdW90ZSkpCisJCWlmIChjID09ICdccicgJiYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09Q WV9GT1JNQVRfQ1NWIHx8ICFpbl9xdW90ZSkpCiAJCXsKIAkJCS8qIENoZWNrIGZvciBcclxuIG9u IGZpcnN0IGxpbmUsIF9hbmRfIGhhbmRsZSBcclxuLiAqLwogCQkJaWYgKGNzdGF0ZS0+ZW9sX3R5 cGUgPT0gRU9MX1VOS05PV04gfHwKQEAgLTEzMjIsMTAgKzEzMjIsMTAgQEAgQ29weVJlYWRMaW5l VGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkJaWYgKGNzdGF0ZS0+ZW9sX3R5cGUgPT0g RU9MX0NSTkwpCiAJCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RF X0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKLQkJCQkJCQkJICFjc3RhdGUtPm9wdHMuY3N2X21vZGUg PworCQkJCQkJCQkgY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgPwogCQkJ CQkJCQkgZXJybXNnKCJsaXRlcmFsIGNhcnJpYWdlIHJldHVybiBmb3VuZCBpbiBkYXRhIikgOgog CQkJCQkJCQkgZXJybXNnKCJ1bnF1b3RlZCBjYXJyaWFnZSByZXR1cm4gZm91bmQgaW4gZGF0YSIp LAotCQkJCQkJCQkgIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSA/CisJCQkJCQkJCSBjc3RhdGUtPm9w dHMuZm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViA/CiAJCQkJCQkJCSBlcnJoaW50KCJVc2UgXCJc XHJcIiB0byByZXByZXNlbnQgY2FycmlhZ2UgcmV0dXJuLiIpIDoKIAkJCQkJCQkJIGVycmhpbnQo IlVzZSBxdW90ZWQgQ1NWIGZpZWxkIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikpKTsK IApAQCAtMTMzOSwxMCArMTMzOSwxMCBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUg Y3N0YXRlKQogCQkJZWxzZSBpZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfTkwpCiAJCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQp LAotCQkJCQkJICFjc3RhdGUtPm9wdHMuY3N2X21vZGUgPworCQkJCQkJIGNzdGF0ZS0+b3B0cy5m b3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWID8KIAkJCQkJCSBlcnJtc2coImxpdGVyYWwgY2Fycmlh Z2UgcmV0dXJuIGZvdW5kIGluIGRhdGEiKSA6CiAJCQkJCQkgZXJybXNnKCJ1bnF1b3RlZCBjYXJy aWFnZSByZXR1cm4gZm91bmQgaW4gZGF0YSIpLAotCQkJCQkJICFjc3RhdGUtPm9wdHMuY3N2X21v ZGUgPworCQkJCQkJIGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWID8KIAkJ CQkJCSBlcnJoaW50KCJVc2UgXCJcXHJcIiB0byByZXByZXNlbnQgY2FycmlhZ2UgcmV0dXJuLiIp IDoKIAkJCQkJCSBlcnJoaW50KCJVc2UgcXVvdGVkIENTViBmaWVsZCB0byByZXByZXNlbnQgY2Fy cmlhZ2UgcmV0dXJuLiIpKSk7CiAJCQkvKiBJZiByZWFjaCBoZXJlLCB3ZSBoYXZlIGZvdW5kIHRo ZSBsaW5lIHRlcm1pbmF0b3IgKi8KQEAgLTEzNTAsMTUgKzEzNTAsMTUgQEAgQ29weVJlYWRMaW5l VGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJfQogCiAJCS8qIFByb2Nlc3MgXG4gKi8KLQkJ aWYgKGMgPT0gJ1xuJyAmJiAoIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSB8fCAhaW5fcXVvdGUpKQor CQlpZiAoYyA9PSAnXG4nICYmIChjc3RhdGUtPm9wdHMuZm9ybWF0ICE9IENPUFlfRk9STUFUX0NT ViB8fCAhaW5fcXVvdGUpKQogCQl7CiAJCQlpZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1Ig fHwgY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1JOTCkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCi0JCQkJCQkgIWNzdGF0 ZS0+b3B0cy5jc3ZfbW9kZSA/CisJCQkJCQkgY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZP Uk1BVF9DU1YgPwogCQkJCQkJIGVycm1zZygibGl0ZXJhbCBuZXdsaW5lIGZvdW5kIGluIGRhdGEi KSA6CiAJCQkJCQkgZXJybXNnKCJ1bnF1b3RlZCBuZXdsaW5lIGZvdW5kIGluIGRhdGEiKSwKLQkJ CQkJCSAhY3N0YXRlLT5vcHRzLmNzdl9tb2RlID8KKwkJCQkJCSBjc3RhdGUtPm9wdHMuZm9ybWF0 ICE9IENPUFlfRk9STUFUX0NTViA/CiAJCQkJCQkgZXJyaGludCgiVXNlIFwiXFxuXCIgdG8gcmVw cmVzZW50IG5ld2xpbmUuIikgOgogCQkJCQkJIGVycmhpbnQoIlVzZSBxdW90ZWQgQ1NWIGZpZWxk IHRvIHJlcHJlc2VudCBuZXdsaW5lLiIpKSk7CiAJCQljc3RhdGUtPmVvbF90eXBlID0gRU9MX05M OwkvKiBpbiBjYXNlIG5vdCBzZXQgeWV0ICovCkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBDb3B5UmVh ZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkgKiBQcm9jZXNzIGJhY2tzbGFzaCwg ZXhjZXB0IGluIENTViBtb2RlIHdoZXJlIGJhY2tzbGFzaCBpcyBhIG5vcm1hbAogCQkgKiBjaGFy YWN0ZXIuCiAJCSAqLwotCQlpZiAoYyA9PSAnXFwnICYmICFjc3RhdGUtPm9wdHMuY3N2X21vZGUp CisJCWlmIChjID09ICdcXCcgJiYgY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9D U1YpCiAJCXsKIAkJCWNoYXIJCWMyOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IDk5Y2IyM2Ni MzQuLmVhOTBhZjI4YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC0xMzQsNyArMTM0LDcgQEAg U2VuZENvcHlCZWdpbihDb3B5VG9TdGF0ZSBjc3RhdGUpCiB7CiAJU3RyaW5nSW5mb0RhdGEgYnVm OwogCWludAkJCW5hdHRzID0gbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KTsKLQlpbnQx NgkJZm9ybWF0ID0gKGNzdGF0ZS0+b3B0cy5iaW5hcnkgPyAxIDogMCk7CisJaW50MTYJCWZvcm1h dCA9IChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSA/IDEgOiAwKTsK IAlpbnQJCQlpOwogCiAJcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX0NvcHlPdXRSZXNwb25z ZSk7CkBAIC0xOTEsNyArMTkxLDcgQEAgQ29weVNlbmRFbmRPZlJvdyhDb3B5VG9TdGF0ZSBjc3Rh dGUpCiAJc3dpdGNoIChjc3RhdGUtPmNvcHlfZGVzdCkKIAl7CiAJCWNhc2UgQ09QWV9GSUxFOgot CQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCQkJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQg IT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCQkJewogCQkJCS8qIERlZmF1bHQgbGluZSB0ZXJtaW5h dGlvbiBkZXBlbmRzIG9uIHBsYXRmb3JtICovCiAjaWZuZGVmIFdJTjMyCkBAIC0yMzYsNyArMjM2 LDcgQEAgQ29weVNlbmRFbmRPZlJvdyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiAJCQlicmVhazsKIAkJ Y2FzZSBDT1BZX0ZST05URU5EOgogCQkJLyogVGhlIEZFL0JFIHByb3RvY29sIHVzZXMgXG4gYXMg bmV3bGluZSBmb3IgYWxsIHBsYXRmb3JtcyAqLwotCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5 KQorCQkJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCQkJ CUNvcHlTZW5kQ2hhcihjc3RhdGUsICdcbicpOwogCiAJCQkvKiBEdW1wIHRoZSBhY2N1bXVsYXRl ZCByb3cgYXMgb25lIENvcHlEYXRhIG1lc3NhZ2UgKi8KQEAgLTc3NSw3ICs3NzUsNyBAQCBEb0Nv cHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiAJCWJvb2wJCWlzdmFybGVuYTsKIAkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwRGVzYywgYXR0bnVtIC0gMSk7CiAKLQkJ aWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENP UFlfRk9STUFUX0JJTkFSWSkKIAkJCWdldFR5cGVCaW5hcnlPdXRwdXRJbmZvKGF0dHItPmF0dHR5 cGlkLAogCQkJCQkJCQkJJm91dF9mdW5jX29pZCwKIAkJCQkJCQkJCSZpc3ZhcmxlbmEpOwpAQCAt Nzk2LDcgKzc5Niw3IEBAIERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJCQkJCQkJCQkJ ICAgIkNPUFkgVE8iLAogCQkJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKIAot CWlmIChjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENP UFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qIEdlbmVyYXRlIGhlYWRlciBmb3IgYSBiaW5hcnkg Y29weSAqLwogCQlpbnQzMgkJdG1wOwpAQCAtODM3LDcgKzgzNyw3IEBAIERvQ29weVRvKENvcHlU b1N0YXRlIGNzdGF0ZSkKIAogCQkJCWNvbG5hbWUgPSBOYW1lU3RyKFR1cGxlRGVzY0F0dHIodHVw RGVzYywgYXR0bnVtIC0gMSktPmF0dG5hbWUpOwogCi0JCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3Zf bW9kZSkKKwkJCQlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YpCiAJ CQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBjb2xuYW1lLCBmYWxzZSk7CiAJCQkJZWxz ZQogCQkJCQlDb3B5QXR0cmlidXRlT3V0VGV4dChjc3RhdGUsIGNvbG5hbWUpOwpAQCAtODg0LDcg Kzg4NCw3IEBAIERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJcHJvY2Vzc2VkID0gKChE Ul9jb3B5ICopIGNzdGF0ZS0+cXVlcnlEZXNjLT5kZXN0KS0+cHJvY2Vzc2VkOwogCX0KIAotCWlm IChjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlf Rk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qIEdlbmVyYXRlIHRyYWlsZXIgZm9yIGEgYmluYXJ5IGNv cHkgKi8KIAkJQ29weVNlbmRJbnQxNihjc3RhdGUsIC0xKTsKQEAgLTkxMiw3ICs5MTIsNyBAQCBD b3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAlN ZW1vcnlDb250ZXh0UmVzZXQoY3N0YXRlLT5yb3djb250ZXh0KTsKIAlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7CiAKLQlpZiAoY3N0YXRlLT5v cHRzLmJpbmFyeSkKKwlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5B UlkpCiAJewogCQkvKiBCaW5hcnkgcGVyLXR1cGxlIGhlYWRlciAqLwogCQlDb3B5U2VuZEludDE2 KGNzdGF0ZSwgbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KSk7CkBAIC05MjEsNyArOTIx LDcgQEAgQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpCiAJLyogTWFrZSBzdXJlIHRoZSB0dXBsZSBpcyBmdWxseSBkZWNvbnN0cnVjdGVkICovCiAJ c2xvdF9nZXRhbGxhdHRycyhzbG90KTsKIAotCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwlp ZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJewogCQlib29s CQluZWVkX2RlbGltID0gZmFsc2U7CiAKQEAgLTk0MSw3ICs5NDEsNyBAQCBDb3B5T25lUm93VG8o Q29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkJCXsKIAkJCQlzdHJp bmcgPSBPdXRwdXRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCiAJCQkJ CQkJCQkJCXZhbHVlKTsKLQkJCQlpZiAoY3N0YXRlLT5vcHRzLmNzdl9tb2RlKQorCQkJCWlmIChj c3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJCQkJQ29weUF0dHJpYnV0 ZU91dENTVihjc3RhdGUsIHN0cmluZywKIAkJCQkJCQkJCQljc3RhdGUtPm9wdHMuZm9yY2VfcXVv dGVfZmxhZ3NbYXR0bnVtIC0gMV0pOwogCQkJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAppbmRleCAwNmRm ZGZlZjcyLi43YTFlZTY1NjAxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5 LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCkBAIC01MSw2ICs1MSwxNiBAQCB0 eXBlZGVmIGVudW0gQ29weUxvZ1ZlcmJvc2l0eUNob2ljZQogCUNPUFlfTE9HX1ZFUkJPU0lUWV9W RVJCT1NFLCAvKiBsb2dzIGFkZGl0aW9uYWwgbWVzc2FnZXMgKi8KIH0gQ29weUxvZ1ZlcmJvc2l0 eUNob2ljZTsKIAorLyoKKyAqIFJlcHJlc2VudHMgdGhlIGZvcm1hdCBvZiB0aGUgQ09QWSBvcGVy YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBDb3B5Rm9ybWF0Cit7CisJQ09QWV9GT1JNQVRfVEVY VCA9IDAsCisJQ09QWV9GT1JNQVRfQklOQVJZLAorCUNPUFlfRk9STUFUX0NTViwKK30gQ29weUZv cm1hdDsKKwogLyoKICAqIEEgc3RydWN0IHRvIGhvbGQgQ09QWSBvcHRpb25zLCBpbiBhIHBhcnNl ZCBmb3JtLiBBbGwgb2YgdGhlc2UgYXJlIHJlbGF0ZWQKICAqIHRvIGZvcm1hdHRpbmcsIGV4Y2Vw dCBmb3IgJ2ZyZWV6ZScsIHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQKQEAg LTYxLDkgKzcxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAkvKiBwYXJh bWV0ZXJzIGZyb20gdGhlIENPUFkgY29tbWFuZCAqLwogCWludAkJCWZpbGVfZW5jb2Rpbmc7CS8q IGZpbGUgb3IgcmVtb3RlIHNpZGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsCiAJCQkJCQkJCSAqIC0x IGlmIG5vdCBzcGVjaWZpZWQgKi8KLQlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8g Ki8KKwlDb3B5Rm9ybWF0CWZvcm1hdDsJCQkvKiBmb3JtYXQgb2YgdGhlIENPUFkgb3BlcmF0aW9u ICovCiAJYm9vbAkJZnJlZXplOwkJCS8qIGZyZWV6ZSByb3dzIG9uIGxvYWRpbmc/ICovCi0JYm9v bAkJY3N2X21vZGU7CQkvKiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9ybWF0PyAqLwogCUNvcHlI ZWFkZXJDaG9pY2UgaGVhZGVyX2xpbmU7CS8qIGhlYWRlciBsaW5lPyAqLwogCWNoYXIJICAgKm51 bGxfcHJpbnQ7CQkvKiBOVUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBlbmNvZGluZyEpICovCiAJ aW50CQkJbnVsbF9wcmludF9sZW47IC8qIGxlbmd0aCBvZiBzYW1lICovCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IGEyNjQ0YTJlNjUuLmQ4ODM4MmNkY2MgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC00OTYsNiArNDk2LDcgQEAgQ29udmVyc2lvbkxvY2F0aW9uCiBDb252ZXJ0 Um93dHlwZUV4cHIKIENvb2tlZENvbnN0cmFpbnQKIENvcHlEZXN0CitDb3B5Rm9ybWF0CiBDb3B5 Rm9ybWF0T3B0aW9ucwogQ29weUZyb21TdGF0ZQogQ29weUZyb21TdGF0ZURhdGEKLS0gCjIuMzQu MQoK --00000000000083bf13062cabb353--