Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qFDDQ-00084j-5Q for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Jun 2023 12:27:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qFDDO-00049d-O8 for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Jun 2023 12:27:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qFDDN-00049U-UF for pgsql-hackers@lists.postgresql.org; Fri, 30 Jun 2023 12:27:06 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qFDDG-001HFY-VR for pgsql-hackers@postgresql.org; Fri, 30 Jun 2023 12:27:04 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-2633fe9b6c0so1145255a91.1 for ; Fri, 30 Jun 2023 05:26:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688128017; x=1690720017; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=OkL/KVWF+P7kp3V3KQJY+6FZbzXvVtlcPOPKXoqAv04=; b=VmH5+5qialaZh1FMyOFSR4OjeXqvXb6aIO1lu8YgXbqEfiX34e+xZVL4tOKdMrXpbw p6fsQbO4jcWgogZg4A/oj9wM5HJBKTzEWYgfnmRfNjrgJiN3R4nu2fvOXDXh3NJ/8Nf2 erQmhi/7eV1Xx4yZByakIWfa5gNoXy5VkaSruxdpHiXCsFIAbsBI/mgBkpsUSlVWBZyZ 2LvfwuHW4VQ5xT3A74ngZgYbLTZZemwfALZVqJC2xH5BqNGPeX1tT9F3fxH9R1XL3uv0 AWT0HtC9M1p0EXbYr/X4cYIZWlKB0lYwoeMzAa4eCHs66lmnhnECYLbm6ij3vaa/YUgB 6f7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688128017; x=1690720017; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=OkL/KVWF+P7kp3V3KQJY+6FZbzXvVtlcPOPKXoqAv04=; b=G592vbSH20taY1Tstqk+MYBY1SuSi1Q0hzkrHqwYBgNKjAfoUMuNEhTo3xJJ2ZlX2V owRBH/f9Ho6rYdPplRJ7kp/8TFB/QIlNyrn/VTP/OaftZnpz1nEwrUR9jen2jWdnqi1G RYCpKBsx8KEmvThBF1SH7kfVK/E/UMU7dF5POWXJdOyUBuhEssCa1l9bBD4OK2JiTIDm kGXmfkEpNR5L2we7XxlzIQGkXXw9eFZUssbsMMRHp6Ip2Uo3C+JDMyjl4MuITdlkJ6IY 1q01M9SxhnnmmFK1NPXG7TdwHhRFOtJJLaswq2P6J25xAelvLmbAbDOXmYwDQTeWaBJV PwaQ== X-Gm-Message-State: ABy/qLYbG7pXyAAMWC9NZhkFzLxYiHlCNWlvIjpsn0K2d6TK9ZCXCWtP T8T3EI+sr8SEr6BogIYSNhkWSXNBupj62J7xDeDVYLRtg9c= X-Google-Smtp-Source: APBJJlF5vAyBSobpjc5VL/wRNfYMl/I26CPmFeOmEPmS+UgS+gvTHo62hoOzeKzFXGGdMfZD7n1BtTyKhlrzeyWrs3Y= X-Received: by 2002:a17:90a:a414:b0:262:ec12:7c40 with SMTP id y20-20020a17090aa41400b00262ec127c40mr3808173pjp.11.1688128017162; Fri, 30 Jun 2023 05:26:57 -0700 (PDT) MIME-Version: 1.0 From: Matthias van de Meent Date: Fri, 30 Jun 2023 14:26:44 +0200 Message-ID: Subject: Extensible storage manager API - SMGR hook Redux To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cc837e05ff57eee8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cc837e05ff57eee8 Content-Type: text/plain; charset="UTF-8" Hi hackers, At Neon, we've been working on removing the file system dependency from PostgreSQL and replacing it with a distributed storage layer. For now, we've seen most success in this by replacing the implementation of the smgr API, but it did require some core modifications like those proposed early last year by Anastasia [0]. As mentioned in the previous thread, there are several reasons why you would want to use a non-default storage manager: storage-level compression, encryption, and disk limit quotas [0]; offloading of cold relation data was also mentioned [1]. In the thread on Anastasia's patch, Yura Sokolov mentioned that instead of a hook-based smgr extension, a registration-based smgr would be preferred, with integration into namespaces. Please find attached an as of yet incomplete patch that starts to do that. The patch is yet incomplete (as it isn't derived from Anastasia's patch), but I would like comments on this regardless, as this is a fairly fundamental component of PostgreSQL that is being modified, and it is often better to get comments early in the development cycle. One significant issue that I've seen so far are that catcache is not guaranteed to be available in all backends that need to do smgr operations, and I've not yet found a good solution. Changes compared to HEAD: - smgrsw is now dynamically allocated and grows as new storage managers are loaded (during shared_preload_libraries) - CREATE TABLESPACE has new optional syntax USING smgrname (option [, ...]) - tablespace storage is (planned) fully managed by smgr through some new smgr apis Changes compared to Anastasia's patch: - extensions do not get to hook and replace the api of the smgr code directly - they are hidden behind the smgr registry. Successes: - 0001 passes tests (make check-world) - 0002 builds without warnings (make) TODO: - fix dependency failures when catcache is unavailable - tablespace redo is currently broken with 0002 - fix tests for 0002 - ensure that pg_dump etc. works with the new tablespace storage manager options Looking forward to any comments, suggestions and reviews. Kind regards, Matthias van de Meent Neon (https://neon.tech/) [0] https://www.postgresql.org/message-id/CAP4vRV6JKXyFfEOf%3Dn%2Bv5RGsZywAQ3CTM8ESWvgq%2BS87Tmgx_g%40mail.gmail.com [1] https://www.postgresql.org/message-id/D365F19F-BC3E-4F96-A91E-8DB13049749E@yandex-team.ru --000000000000cc837e05ff57eee8 Content-Type: application/octet-stream; name="v1-0001-Expose-f_smgr-to-extensions-for-manual-implementa.patch" Content-Disposition: attachment; filename="v1-0001-Expose-f_smgr-to-extensions-for-manual-implementa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljijgl9w0 RnJvbSBiYzRmOGY5YjQzZGMwNTBhYzJmYTkyZDA3NzBlYjYzYzgyMjgzOGI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjcgSnVuIDIwMjMgMTU6NTk6MjMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHYxIDEvMl0gRXhwb3NlIGZfc21nciB0byBleHRlbnNpb25zIGZvciBtYW51 YWwgaW1wbGVtZW50YXRpb24KClRoZXJlIGFyZSB2YXJpb3VzIHJlYXNvbnMgd2h5IG9uZSB3b3Vs ZCB3YW50IHRvIGNyZWF0ZSB0aGVpciBvd24KaW1wbGVtZW50YXRpb24gb2YgYSBzdG9yYWdlIG1h bmFnZXIsIGFtb25nIHdoaWNoIGFyZSBibG9jay1sZXZlbCBjb21wcmVzc2lvbiwKZW5jcnlwdGlv biBhbmQgb2ZmbG9hZGluZyB0byBjb2xkIHN0b3JhZ2UuIFRoaXMgcGF0Y2ggaXMgYSBmaXJzdCBw YXRjaCB0aGF0CmFsbG93cyBleHRlbnNpb25zIHRvIHJlZ2lzdGVyIHRoZWlyIG93biBTTWdyLgoK Tm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIFNNZ3IgaXMgbm90IHlldCB1c2VkIC0gb25seSB0aGUg Zmlyc3QgU01nciB0byByZWdpc3RlcgppcyB1c2VkLCBhbmQgdGhpcyBpcyBjdXJyZW50bHkgdGhl IG1kLmMgc21nci4gRnV0dXJlIGNvbW1pdHMgd2lsbCBpbmNsdWRlCmZhY2lsaXRpZXMgdG8gc2Vs ZWN0IGFuIFNNZ3IgZm9yIGVhY2ggdGFibGVzcGFjZS4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYyB8ICAgNSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyAg ICAgICB8IDE2NCArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9y YWdlL3NtZ3Ivc21nci5jICAgICB8IDEyNiArKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgIHwgIDEyICsrCiBzcmMvaW5jbHVkZS9taXNjYWRt aW4uaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL21kLmggICAgICAg ICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICB8ICA1NiAr KysrKysrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDI0MiBpbnNlcnRpb25zKCspLCAxMjYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA0YzQ5MzkzZmM1Li44 Njg1YjlmZGU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtMTAwMiw2ICsx MDAyLDExIEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJICovCiAJ QXBwbHlMYXVuY2hlclJlZ2lzdGVyKCk7CiAKKwkvKgorCSAqIFJlZ2lzdGVyIGJ1aWx0LWluIG1h bmFnZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHN0YXRpYyBhcnJheXMKKwkgKi8KKwlyZWdpc3Rl cl9idWlsdGluX2R5bmFtaWNfbWFuYWdlcnMoKTsKKwogCS8qCiAJICogcHJvY2VzcyBhbnkgbGli cmFyaWVzIHRoYXQgc2hvdWxkIGJlIHByZWxvYWRlZCBhdCBwb3N0bWFzdGVyIHN0YXJ0CiAJICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDMwZGJjMDJmODIuLjY5MGJkZDI3YzUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc21nci9tZC5jCkBAIC04Niw2ICs4NiwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfTWRmZFZlYwog fSBNZGZkVmVjOwogCiBzdGF0aWMgTWVtb3J5Q29udGV4dCBNZEN4dDsJCS8qIGNvbnRleHQgZm9y IGFsbCBNZGZkVmVjIG9iamVjdHMgKi8KK1NNZ3JJZCBNZFNNZ3JJZDsKKwordHlwZWRlZiBzdHJ1 Y3QgTWRTTWdyUmVsYXRpb25EYXRhCit7CisJLyogcGFyZW50IGRhdGEgKi8KKwlTTWdyUmVsYXRp b25EYXRhIHJlbG47CisJLyoKKwkgKiBmb3IgbWQuYzsgcGVyLWZvcmsgYXJyYXlzIG9mIHRoZSBu dW1iZXIgb2Ygb3BlbiBzZWdtZW50cworCSAqIChtZF9udW1fb3Blbl9zZWdzKSBhbmQgdGhlIHNl Z21lbnRzIHRoZW1zZWx2ZXMgKG1kX3NlZ19mZHMpLgorCSAqLworCWludAkJCW1kX251bV9vcGVu X3NlZ3NbTUFYX0ZPUktOVU0gKyAxXTsKKwlzdHJ1Y3QgX01kZmRWZWMgKm1kX3NlZ19mZHNbTUFY X0ZPUktOVU0gKyAxXTsKK30gTWRTTWdyUmVsYXRpb25EYXRhOworCit0eXBlZGVmIE1kU01nclJl bGF0aW9uRGF0YSAqTWRTTWdyUmVsYXRpb247CiAKIAogLyogUG9wdWxhdGUgYSBmaWxlIHRhZyBk ZXNjcmliaW5nIGFuIG1kLmMgc2VnbWVudCBmaWxlLiAqLwpAQCAtMTIwLDI2ICsxMzUsNTIgQEAg c3RhdGljIE1lbW9yeUNvbnRleHQgTWRDeHQ7CQkvKiBjb250ZXh0IGZvciBhbGwgTWRmZFZlYyBv YmplY3RzICovCiAjZGVmaW5lIEVYVEVOU0lPTl9ET05UX09QRU4JCQkoMSA8PCA1KQogCiAKK3Zv aWQgbWRzbWdyX3JlZ2lzdGVyKHZvaWQpCit7CisJLyogbWFnbmV0aWMgZGlzayAqLworCWZfc21n ciBtZF9zbWdyID0gKGZfc21ncikgeworCQkubmFtZSA9ICJtZCIsCisJCS5zbWdyX2luaXQgPSBt ZGluaXQsCisJCS5zbWdyX3NodXRkb3duID0gTlVMTCwKKwkJLnNtZ3Jfb3BlbiA9IG1kb3BlbiwK KwkJLnNtZ3JfY2xvc2UgPSBtZGNsb3NlLAorCQkuc21ncl9jcmVhdGUgPSBtZGNyZWF0ZSwKKwkJ LnNtZ3JfZXhpc3RzID0gbWRleGlzdHMsCisJCS5zbWdyX3VubGluayA9IG1kdW5saW5rLAorCQku c21ncl9leHRlbmQgPSBtZGV4dGVuZCwKKwkJLnNtZ3JfemVyb2V4dGVuZCA9IG1kemVyb2V4dGVu ZCwKKwkJLnNtZ3JfcHJlZmV0Y2ggPSBtZHByZWZldGNoLAorCQkuc21ncl9yZWFkID0gbWRyZWFk LAorCQkuc21ncl93cml0ZSA9IG1kd3JpdGUsCisJCS5zbWdyX3dyaXRlYmFjayA9IG1kd3JpdGVi YWNrLAorCQkuc21ncl9uYmxvY2tzID0gbWRuYmxvY2tzLAorCQkuc21ncl90cnVuY2F0ZSA9IG1k dHJ1bmNhdGUsCisJCS5zbWdyX2ltbWVkc3luYyA9IG1kaW1tZWRzeW5jLAorCX07CisKKwlNZFNN Z3JJZCA9IHNtZ3JfcmVnaXN0ZXIoJm1kX3NtZ3IsIHNpemVvZihNZFNNZ3JSZWxhdGlvbkRhdGEp KTsKK30KKwogLyogbG9jYWwgcm91dGluZXMgKi8KIHN0YXRpYyB2b2lkIG1kdW5saW5rZm9yayhS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJ CSBib29sIGlzUmVkbyk7Ci1zdGF0aWMgTWRmZFZlYyAqbWRvcGVuZm9yayhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpOwotc3RhdGljIHZvaWQgcmVn aXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAorc3RhdGljIE1kZmRWZWMgKm1kb3BlbmZvcmsoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZGlydHlf c2VnbWVudChNZFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJ CSAgIE1kZmRWZWMgKnNlZyk7CiBzdGF0aWMgdm9pZCByZWdpc3Rlcl91bmxpbmtfc2VnbWVudChS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJ CQkJCUJsb2NrTnVtYmVyIHNlZ25vKTsKIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX2ZvcmdldF9yZXF1 ZXN0KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAog CQkJCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3RhdGljIHZvaWQgX2ZkdmVjX3Jlc2l6ZShT TWdyUmVsYXRpb24gcmVsbiwKK3N0YXRpYyB2b2lkIF9mZHZlY19yZXNpemUoTWRTTWdyUmVsYXRp b24gcmVsbiwKIAkJCQkJCSAgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJICBpbnQgbnNlZyk7 Ci1zdGF0aWMgY2hhciAqX21kZmRfc2VncGF0aChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLAorc3RhdGljIGNoYXIgKl9tZGZkX3NlZ3BhdGgoTWRTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJICAgQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3Rh dGljIE1kZmRWZWMgKl9tZGZkX29wZW5zZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwKK3N0YXRpYyBNZGZkVmVjICpfbWRmZF9vcGVuc2VnKE1kU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCQkgIEJsb2NrTnVtYmVyIHNlZ25vLCBpbnQg b2ZsYWdzKTsKLXN0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKK3N0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoTWRTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSBCbG9ja051bWJlciBi bGtubywgYm9vbCBza2lwRnN5bmMsIGludCBiZWhhdmlvcik7Ci1zdGF0aWMgQmxvY2tOdW1iZXIg X21kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorc3RhdGlj IEJsb2NrTnVtYmVyIF9tZG5ibG9ja3MoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLAogCQkJCQkJCSAgTWRmZFZlYyAqc2VnKTsKIAogc3RhdGljIGlubGluZSBpbnQKQEAg LTE5NCwxMSArMjM1LDEzIEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCU1kZmRWZWMgICAgKm1kZmQ7CiAJY2hhcgkgICAqcGF0 aDsKIAlGaWxlCQlmZDsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24p IHJlbG47CisJQXNzZXJ0KHJlbG4tPnNtZ3Jfd2hpY2ggPT0gTWRTTWdySWQpOwogCi0JaWYgKGlz UmVkbyAmJiByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKKwlpZiAoaXNSZWRv ICYmIG1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCiAJCXJldHVybjsJCQkJ CS8qIGNyZWF0ZWQgYW5kIG9wZW5lZCBhbHJlYWR5Li4uICovCiAKLQlBc3NlcnQocmVsbi0+bWRf bnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9PSAwKTsKKwlBc3NlcnQobWRyZWxuLT5tZF9udW1fb3Bl bl9zZWdzW2ZvcmtudW1dID09IDApOwogCiAJLyoKIAkgKiBXZSBtYXkgYmUgdXNpbmcgdGhlIHRh cmdldCB0YWJsZSBzcGFjZSBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcwpAQCAtMjM1LDggKzI3 OCw4IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJv b2wgaXNSZWRvKQogCiAJcGZyZWUocGF0aCk7CiAKLQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtu dW0sIDEpOwotCW1kZmQgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVswXTsKKwlfZmR2ZWNf cmVzaXplKG1kcmVsbiwgZm9ya251bSwgMSk7CisJbWRmZCA9ICZtZHJlbG4tPm1kX3NlZ19mZHNb Zm9ya251bV1bMF07CiAJbWRmZC0+bWRmZF92ZmQgPSBmZDsKIAltZGZkLT5tZGZkX3NlZ25vID0g MDsKIH0KQEAgLTQ2Miw2ICs1MDUsNyBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAlvZmZfdAkJc2Vla3BvczsK IAlpbnQJCQluYnl0ZXM7CiAJTWRmZFZlYyAgICAqdjsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4g PSAoTWRTTWdyUmVsYXRpb24pIHJlbG47CiAKIAkvKiBJZiB0aGlzIGJ1aWxkIHN1cHBvcnRzIGRp cmVjdCBJL08sIHRoZSBidWZmZXIgbXVzdCBiZSBJL08gYWxpZ25lZC4gKi8KIAlpZiAoUEdfT19E SVJFQ1QgIT0gMCAmJiBQR19JT19BTElHTl9TSVpFIDw9IEJMQ0tTWikKQEAgLTQ4NSw3ICs1Mjks NyBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKIAkJCQkJCXJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9y a251bSksCiAJCQkJCQlJbnZhbGlkQmxvY2tOdW1iZXIpKSk7CiAKLQl2ID0gX21kZmRfZ2V0c2Vn KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVBVEUpOwor CXYgPSBfbWRmZF9nZXRzZWcobWRyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5jLCBF WFRFTlNJT05fQ1JFQVRFKTsKIAogCXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251 bSAlICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CiAKQEAgLTUwOSw5ICs1NTMsOSBAQCBt ZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKIAl9CiAKIAlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxuKSkK LQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwkJcmVnaXN0ZXJf ZGlydHlfc2VnbWVudChtZHJlbG4sIGZvcmtudW0sIHYpOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3Mo cmVsbiwgZm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3Nl cnQoX21kbmJsb2NrcyhtZHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNF R19TSVpFKSk7CiB9CiAKIC8qCkBAIC01MjcsNiArNTcxLDcgQEAgbWR6ZXJvZXh0ZW5kKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJTWRmZFZlYyAgICAqdjsKIAlCbG9j a051bWJlciBjdXJibG9ja251bSA9IGJsb2NrbnVtOwogCWludAkJCXJlbWJsb2NrcyA9IG5ibG9j a3M7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOwogCiAJ QXNzZXJ0KG5ibG9ja3MgPiAwKTsKIApAQCAtNTU4LDcgKzYwMyw3IEBAIG1kemVyb2V4dGVuZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQllbHNlCiAJCQludW1ibG9j a3MgPSByZW1ibG9ja3M7CiAKLQkJdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBjdXJi bG9ja251bSwgc2tpcEZzeW5jLCBFWFRFTlNJT05fQ1JFQVRFKTsKKwkJdiA9IF9tZGZkX2dldHNl ZyhtZHJlbG4sIGZvcmtudW0sIGN1cmJsb2NrbnVtLCBza2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVB VEUpOwogCiAJCUFzc2VydChzZWdzdGFydGJsb2NrIDwgUkVMU0VHX1NJWkUpOwogCQlBc3NlcnQo c2Vnc3RhcnRibG9jayArIG51bWJsb2NrcyA8PSBSRUxTRUdfU0laRSk7CkBAIC02MTMsOSArNjU4 LDkgQEAgbWR6ZXJvZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s CiAJCX0KIAogCQlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxuKSkKLQkJCXJlZ2lz dGVyX2RpcnR5X3NlZ21lbnQocmVsbiwgZm9ya251bSwgdik7CisJCQlyZWdpc3Rlcl9kaXJ0eV9z ZWdtZW50KG1kcmVsbiwgZm9ya251bSwgdik7CiAKLQkJQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwg Zm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwkJQXNzZXJ0KF9t ZG5ibG9ja3MobWRyZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0la RSkpOwogCiAJCXJlbWJsb2NrcyAtPSBudW1ibG9ja3M7CiAJCWN1cmJsb2NrbnVtICs9IG51bWJs b2NrczsKQEAgLTYzMyw3ICs2NzgsNyBAQCBtZHplcm9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKICAqIGludmVudCBvbmUgb3V0IG9mIHdob2xlIGNsb3RoLgog ICovCiBzdGF0aWMgTWRmZFZlYyAqCi1tZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIGludCBiZWhhdmlvcikKK21kb3BlbmZvcmsoTWRTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCiB7CiAJTWRmZFZlYyAgICAq bWRmZDsKIAljaGFyCSAgICpwYXRoOwpAQCAtNjQzLDcgKzY4OCw3IEBAIG1kb3BlbmZvcmsoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogCWlmIChy ZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKIAkJcmV0dXJuICZyZWxuLT5tZF9z ZWdfZmRzW2ZvcmtudW1dWzBdOwogCi0JcGF0aCA9IHJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRv ciwgZm9ya251bSk7CisJcGF0aCA9IHJlbHBhdGgocmVsbi0+cmVsbi5zbWdyX3Jsb2NhdG9yLCBm b3JrbnVtKTsKIAogCWZkID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBfbWRmZF9vcGVuX2ZsYWdz KCkpOwogCkBAIC02NzgsOSArNzIzLDEwIEBAIG1kb3BlbmZvcmsoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogdm9pZAogbWRvcGVuKFNNZ3JSZWxh dGlvbiByZWxuKQogeworCU1kU01nclJlbGF0aW9uIG1kcmVsbiA9IChNZFNNZ3JSZWxhdGlvbikg cmVsbjsKIAkvKiBtYXJrIGl0IG5vdCBvcGVuICovCiAJZm9yIChpbnQgZm9ya251bSA9IDA7IGZv cmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJcmVsbi0+bWRfbnVtX29wZW5fc2Vn c1tmb3JrbnVtXSA9IDA7CisJCW1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IDA7 CiB9CiAKIC8qCkBAIC02ODksNyArNzM1LDggQEAgbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKQog dm9pZAogbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogewot CWludAkJCW5vcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJTWRT TWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOworCWludAkJCW5vcGVu c2VncyA9IG1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKIAogCS8qIE5vIHdvcmsg aWYgYWxyZWFkeSBjbG9zZWQgKi8KIAlpZiAobm9wZW5zZWdzID09IDApCkBAIC02OTgsMTAgKzc0 NSwxMCBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJ LyogY2xvc2Ugc2VnbWVudHMgc3RhcnRpbmcgZnJvbSB0aGUgZW5kICovCiAJd2hpbGUgKG5vcGVu c2VncyA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251 bV1bbm9wZW5zZWdzIC0gMV07CisJCU1kZmRWZWMgICAgKnYgPSAmbWRyZWxuLT5tZF9zZWdfZmRz W2ZvcmtudW1dW25vcGVuc2VncyAtIDFdOwogCiAJCUZpbGVDbG9zZSh2LT5tZGZkX3ZmZCk7Ci0J CV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgbm9wZW5zZWdzIC0gMSk7CisJCV9mZHZlY19y ZXNpemUobWRyZWxuLCBmb3JrbnVtLCBub3BlbnNlZ3MgLSAxKTsKIAkJbm9wZW5zZWdzLS07CiAJ fQogfQpAQCAtNzE1LDEwICs3NjIsMTEgQEAgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkKICNpZmRlZiBVU0VfUFJF RkVUQ0gKIAlvZmZfdAkJc2Vla3BvczsKIAlNZGZkVmVjICAgICp2OworCU1kU01nclJlbGF0aW9u IG1kcmVsbiA9IChNZFNNZ3JSZWxhdGlvbikgcmVsbjsKIAogCUFzc2VydCgoaW9fZGlyZWN0X2Zs YWdzICYgSU9fRElSRUNUX0RBVEEpID09IDApOwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBm b3JrbnVtLCBibG9ja251bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhtZHJlbG4sIGZvcmtu dW0sIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEluUmVjb3ZlcnkgPyBFWFRFTlNJT05fUkVUVVJO X05VTEwgOiBFWFRFTlNJT05fRkFJTCk7CiAJaWYgKHYgPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNl OwpAQCAtNzQzLDYgKzc5MSw3IEBAIG1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAlvZmZfdAkJc2Vla3BvczsKIAlpbnQJ CQluYnl0ZXM7CiAJTWRmZFZlYyAgICAqdjsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRT TWdyUmVsYXRpb24pIHJlbG47CiAKIAkvKiBJZiB0aGlzIGJ1aWxkIHN1cHBvcnRzIGRpcmVjdCBJ L08sIHRoZSBidWZmZXIgbXVzdCBiZSBJL08gYWxpZ25lZC4gKi8KIAlpZiAoUEdfT19ESVJFQ1Qg IT0gMCAmJiBQR19JT19BTElHTl9TSVpFIDw9IEJMQ0tTWikKQEAgLTc1NCw3ICs4MDMsNyBAQCBt ZHJlYWQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCiAJCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl ciwKIAkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwogCi0JdiA9IF9tZGZk X2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNl ZyhtZHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEVYVEVOU0lPTl9GQUlM IHwgRVhURU5TSU9OX0NSRUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENL U1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtODEyLDYg Kzg2MSw3IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJb2ZmX3QJCXNlZWtwb3M7CiAJaW50CQkJbmJ5dGVzOwog CU1kZmRWZWMgICAgKnY7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9u KSByZWxuOwogCiAJLyogSWYgdGhpcyBidWlsZCBzdXBwb3J0cyBkaXJlY3QgSS9PLCB0aGUgYnVm ZmVyIG11c3QgYmUgSS9PIGFsaWduZWQuICovCiAJaWYgKFBHX09fRElSRUNUICE9IDAgJiYgUEdf SU9fQUxJR05fU0laRSA8PSBCTENLU1opCkBAIC04MjgsNyArODc4LDcgQEAgbWR3cml0ZShTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwK IAkJCQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKIAkJCQkJ CQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAotCXYgPSBfbWRmZF9nZXRzZWco cmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHNraXBGc3luYywKKwl2ID0gX21kZmRfZ2V0c2VnKG1k cmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHNraXBGc3luYywKIAkJCQkJIEVYVEVOU0lPTl9GQUlM IHwgRVhURU5TSU9OX0NSRUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENL U1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtODYzLDcg KzkxMyw3IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJfQogCiAJaWYgKCFza2lwRnN5bmMgJiYgIVNtZ3JJc1Rl bXAocmVsbikpCi0JCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQocmVsbiwgZm9ya251bSwgdik7CisJ CXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQobWRyZWxuLCBmb3JrbnVtLCB2KTsKIH0KIAogLyoKQEAg LTg3Niw2ICs5MjYsNyBAQCB2b2lkCiBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAogCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5i bG9ja3MpCiB7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxu OwogCUFzc2VydCgoaW9fZGlyZWN0X2ZsYWdzICYgSU9fRElSRUNUX0RBVEEpID09IDApOwogCiAJ LyoKQEAgLTg5MCw3ICs5NDEsNyBAQCBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAogCQlpbnQJCQlzZWdudW1fc3RhcnQsCiAJCQkJCXNlZ251bV9lbmQ7 CiAKLQkJdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgdHJ1ZSAvKiBu b3QgdXNlZCAqLyAsCisJCXYgPSBfbWRmZF9nZXRzZWcobWRyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwgdHJ1ZSAvKiBub3QgdXNlZCAqLyAsCiAJCQkJCQkgRVhURU5TSU9OX0RPTlRfT1BFTik7CiAK IAkJLyoKQEAgLTkzNywxMSArOTg4LDEyIEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtKQogCU1kZmRWZWMgICAgKnY7CiAJQmxvY2tOdW1iZXIgbmJsb2Nr czsKIAlCbG9ja051bWJlciBzZWdubzsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdy UmVsYXRpb24pIHJlbG47CiAKLQltZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0sIEVYVEVOU0lPTl9G QUlMKTsKKwltZG9wZW5mb3JrKG1kcmVsbiwgZm9ya251bSwgRVhURU5TSU9OX0ZBSUwpOwogCiAJ LyogbWRvcGVuIGhhcyBvcGVuZWQgdGhlIGZpcnN0IHNlZ21lbnQgKi8KLQlBc3NlcnQocmVsbi0+ bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApOworCUFzc2VydChtZHJlbG4tPm1kX251bV9v cGVuX3NlZ3NbZm9ya251bV0gPiAwKTsKIAogCS8qCiAJICogU3RhcnQgZnJvbSB0aGUgbGFzdCBv cGVuIHNlZ21lbnRzLCB0byBhdm9pZCByZWR1bmRhbnQgc2Vla3MuICBXZSBoYXZlCkBAIC05NTYs MTIgKzEwMDgsMTIgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0pCiAJICogdGhhdCdzIE9LIGJlY2F1c2UgdGhlIGNoZWNrcG9pbnRlciBuZXZlciBuZWVk cyB0byBjb21wdXRlIHJlbGF0aW9uCiAJICogc2l6ZS4pCiAJICovCi0Jc2Vnbm8gPSByZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dIC0gMTsKLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9y a251bV1bc2Vnbm9dOworCXNlZ25vID0gbWRyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1d IC0gMTsKKwl2ID0gJm1kcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CiAKIAlmb3Ig KDs7KQogCXsKLQkJbmJsb2NrcyA9IF9tZG5ibG9ja3MocmVsbiwgZm9ya251bSwgdik7CisJCW5i bG9ja3MgPSBfbWRuYmxvY2tzKG1kcmVsbiwgZm9ya251bSwgdik7CiAJCWlmIChuYmxvY2tzID4g KChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKQogCQkJZWxvZyhGQVRBTCwgInNlZ21lbnQgdG9v IGJpZyIpOwogCQlpZiAobmJsb2NrcyA8ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSkKQEAg LTk3OSw3ICsxMDMxLDcgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pCiAJCSAqIHVuZGVybWluZXMgX21kZmRfZ2V0c2VnJ3MgYXR0ZW1wdHMgdG8gbm90 aWNlIGFuZCByZXBvcnQgYW4gZXJyb3IKIAkJICogdXBvbiBhY2Nlc3MgdG8gYSBtaXNzaW5nIHNl Z21lbnQuCiAJCSAqLwotCQl2ID0gX21kZmRfb3BlbnNlZyhyZWxuLCBmb3JrbnVtLCBzZWdubywg MCk7CisJCXYgPSBfbWRmZF9vcGVuc2VnKG1kcmVsbiwgZm9ya251bSwgc2Vnbm8sIDApOwogCQlp ZiAodiA9PSBOVUxMKQogCQkJcmV0dXJuIHNlZ25vICogKChCbG9ja051bWJlcikgUkVMU0VHX1NJ WkUpOwogCX0KQEAgLTk5NCw2ICsxMDQ2LDcgQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCUJsb2NrTnVtYmVy IGN1cm5ibGs7CiAJQmxvY2tOdW1iZXIgcHJpb3JibG9ja3M7CiAJaW50CQkJY3Vyb3BlbnNlZ3M7 CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOwogCiAJLyoK IAkgKiBOT1RFOiBtZG5ibG9ja3MgbWFrZXMgc3VyZSB3ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZl IHNlZ21lbnRzLCBzbyB0aGF0CkBAIC0xMDE3LDE0ICsxMDcwLDE0IEBAIG1kdHJ1bmNhdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykK IAkgKiBUcnVuY2F0ZSBzZWdtZW50cywgc3RhcnRpbmcgYXQgdGhlIGxhc3Qgb25lLiBTdGFydGlu ZyBhdCB0aGUgZW5kIG1ha2VzCiAJICogbWFuYWdpbmcgdGhlIG1lbW9yeSBmb3IgdGhlIGZkIGFy cmF5IGVhc2llciwgc2hvdWxkIHRoZXJlIGJlIGVycm9ycy4KIAkgKi8KLQljdXJvcGVuc2VncyA9 IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJY3Vyb3BlbnNlZ3MgPSBtZHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CiAJd2hpbGUgKGN1cm9wZW5zZWdzID4gMCkKIAl7 CiAJCU1kZmRWZWMgICAgKnY7CiAKIAkJcHJpb3JibG9ja3MgPSAoY3Vyb3BlbnNlZ3MgLSAxKSAq IFJFTFNFR19TSVpFOwogCi0JCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtjdXJvcGVu c2VncyAtIDFdOworCQl2ID0gJm1kcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtjdXJvcGVuc2Vn cyAtIDFdOwogCiAJCWlmIChwcmlvcmJsb2NrcyA+IG5ibG9ja3MpCiAJCXsKQEAgLTEwMzksMTMg KzEwOTIsMTMgQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92 ZmQpKSkpOwogCiAJCQlpZiAoIVNtZ3JJc1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGlydHlf c2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KG1k cmVsbiwgZm9ya251bSwgdik7CiAKIAkJCS8qIHdlIG5ldmVyIGRyb3AgdGhlIDFzdCBzZWdtZW50 ICovCi0JCQlBc3NlcnQodiAhPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVswXSk7CisJCQlB c3NlcnQodiAhPSAmbWRyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdKTsKIAogCQkJRmlsZUNs b3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgY3Vyb3Bl bnNlZ3MgLSAxKTsKKwkJCV9mZHZlY19yZXNpemUobWRyZWxuLCBmb3JrbnVtLCBjdXJvcGVuc2Vn cyAtIDEpOwogCQl9CiAJCWVsc2UgaWYgKHByaW9yYmxvY2tzICsgKChCbG9ja051bWJlcikgUkVM U0VHX1NJWkUpID4gbmJsb2NrcykKIAkJewpAQCAtMTA2NSw3ICsxMTE4LDcgQEAgbWR0cnVuY2F0 ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxv Y2tzKQogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92ZmQpLAogCQkJCQkJCQluYmxvY2tz KSkpOwogCQkJaWYgKCFTbWdySXNUZW1wKHJlbG4pKQotCQkJCXJlZ2lzdGVyX2RpcnR5X3NlZ21l bnQocmVsbiwgZm9ya251bSwgdik7CisJCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChtZHJlbG4s IGZvcmtudW0sIHYpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTA5NSw2ICsxMTQ4LDcgQEAgbWRp bW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIHsKIAlpbnQJ CQlzZWdubzsKIAlpbnQJCQltaW5faW5hY3RpdmVfc2VnOworCU1kU01nclJlbGF0aW9uIG1kcmVs biA9IChNZFNNZ3JSZWxhdGlvbikgcmVsbjsKIAogCS8qCiAJICogTk9URTogbWRuYmxvY2tzIG1h a2VzIHN1cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdtZW50cywgc28gdGhhdApAQCAt MTEwMiw3ICsxMTU2LDcgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSkKIAkgKi8KIAltZG5ibG9ja3MocmVsbiwgZm9ya251bSk7CiAKLQltaW5faW5h Y3RpdmVfc2VnID0gc2Vnbm8gPSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCW1p bl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IG1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVt XTsKIAogCS8qCiAJICogVGVtcG9yYXJpbHkgb3BlbiBpbmFjdGl2ZSBzZWdtZW50cywgdGhlbiBj bG9zZSB0aGVtIGFmdGVyIHN5bmMuICBUaGVyZQpAQCAtMTExMCwxMiArMTE2NCwxMiBAQCBtZGlt bWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqIGlzIGhh cm1sZXNzLiAgV2UgZG9uJ3QgYm90aGVyIHRvIGNsZWFuIHRoZW0gdXAgYW5kIHRha2UgYSByaXNr IG9mCiAJICogZnVydGhlciB0cm91YmxlLiAgVGhlIG5leHQgbWRjbG9zZSgpIHdpbGwgc29vbiBj bG9zZSB0aGVtLgogCSAqLwotCXdoaWxlIChfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIHNl Z25vLCAwKSAhPSBOVUxMKQorCXdoaWxlIChfbWRmZF9vcGVuc2VnKG1kcmVsbiwgZm9ya251bSwg c2Vnbm8sIDApICE9IE5VTEwpCiAJCXNlZ25vKys7CiAKIAl3aGlsZSAoc2Vnbm8gPiAwKQogCXsK LQkJTWRmZFZlYyAgICAqdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vIC0gMV07 CisJCU1kZmRWZWMgICAgKnYgPSAmbWRyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vIC0g MV07CiAKIAkJLyoKIAkJICogZnN5bmNzIGRvbmUgdGhyb3VnaCBtZGltbWVkc3luYygpIHNob3Vs ZCBiZSB0cmFja2VkIGluIGEgc2VwYXJhdGUKQEAgLTExMzYsNyArMTE5MCw3IEBAIG1kaW1tZWRz eW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJCWlmIChzZWdubyA+ IG1pbl9pbmFjdGl2ZV9zZWcpCiAJCXsKIAkJCUZpbGVDbG9zZSh2LT5tZGZkX3ZmZCk7Ci0JCQlf ZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vIC0gMSk7CisJCQlfZmR2ZWNfcmVzaXpl KG1kcmVsbiwgZm9ya251bSwgc2Vnbm8gLSAxKTsKIAkJfQogCiAJCXNlZ25vLS07CkBAIC0xMTUz LDE0ICsxMjA3LDE0IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pCiAgKiBlbm91Z2ggdG8gYmUgYSBwZXJmb3JtYW5jZSBwcm9ibGVtKS4KICAqLwog c3RhdGljIHZvaWQKLXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQorcmVnaXN0ZXJfZGlydHlfc2VnbWVudChN ZFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIHsK IAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUcodGFnLCByZWxuLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IsIGZvcmtudW0sIHNlZy0+bWRmZF9zZWdubyk7CisJSU5JVF9NRF9GSUxFVEFH KHRhZywgcmVsbi0+cmVsbi5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtudW0sIHNlZy0+bWRm ZF9zZWdubyk7CiAKIAkvKiBUZW1wIHJlbGF0aW9ucyBzaG91bGQgbmV2ZXIgYmUgZnN5bmMnZCAq LwotCUFzc2VydCghU21ncklzVGVtcChyZWxuKSk7CisJQXNzZXJ0KCFTbWdySXNUZW1wKCZyZWxu LT5yZWxuKSk7CiAKIAlpZiAoIVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19SRVFVRVNU LCBmYWxzZSAvKiByZXRyeU9uRXJyb3IgKi8gKSkKIAl7CkBAIC0xMjc4LDcgKzEzMzIsNyBAQCBE cm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBi b29sIGlzUmVkbykKICAqIF9mZHZlY19yZXNpemUoKSAtLSBSZXNpemUgdGhlIGZvcmsncyBvcGVu IHNlZ21lbnRzIGFycmF5CiAgKi8KIHN0YXRpYyB2b2lkCi1fZmR2ZWNfcmVzaXplKFNNZ3JSZWxh dGlvbiByZWxuLAorX2ZkdmVjX3Jlc2l6ZShNZFNNZ3JSZWxhdGlvbiByZWxuLAogCQkJICBGb3Jr TnVtYmVyIGZvcmtudW0sCiAJCQkgIGludCBuc2VnKQogewpAQCAtMTMxNiwxMiArMTM3MCwxMiBA QCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAogICogcmV0dXJuZWQgc3RyaW5nIGlz IHBhbGxvYydkLgogICovCiBzdGF0aWMgY2hhciAqCi1fbWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vKQorX21kZmRfc2Vn cGF0aChNZFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IHNlZ25vKQogewogCWNoYXIJICAgKnBhdGgsCiAJCQkgICAqZnVsbHBhdGg7CiAKLQlwYXRoID0g cmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gcmVscGF0aChy ZWxuLT5yZWxuLnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pOwogCiAJaWYgKHNlZ25vID4gMCkKIAl7 CkBAIC0xMzM5LDcgKzEzOTMsNyBAQCBfbWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vKQogICogYW5kIG1ha2UgYSBNZGZk VmVjIG9iamVjdCBmb3IgaXQuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RhdGlj IE1kZmRWZWMgKgotX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKK19tZGZkX29wZW5zZWcoTWRTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKIAkJCSAgaW50IG9m bGFncykKIHsKIAlNZGZkVmVjICAgICp2OwpAQCAtMTM4NCw3ICsxNDM4LDcgQEAgX21kZmRfb3Bl bnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBz ZWdubywKICAqIEVYVEVOU0lPTl9DUkVBVEUgY2FzZS4KICAqLwogc3RhdGljIE1kZmRWZWMgKgot X21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsa25vLAorX21kZmRfZ2V0c2VnKE1kU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkgYm9vbCBza2lwRnN5bmMsIGludCBi ZWhhdmlvcikKIHsKIAlNZGZkVmVjICAgICp2OwpAQCAtMTQ1OCw3ICsxNTEyLDcgQEAgX21kZmRf Z2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IGJsa25vLAogCQkJCWNoYXIJICAgKnplcm9idWYgPSBwYWxsb2NfYWxpZ25lZChCTENLU1osIFBH X0lPX0FMSUdOX1NJWkUsCiAJCQkJCQkJCQkJCQkJIE1DWFRfQUxMT0NfWkVSTyk7CiAKLQkJCQlt ZGV4dGVuZChyZWxuLCBmb3JrbnVtLAorCQkJCW1kZXh0ZW5kKChTTWdyUmVsYXRpb24pIHJlbG4s IGZvcmtudW0sCiAJCQkJCQkgbmV4dHNlZ25vICogKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUp IC0gMSwKIAkJCQkJCSB6ZXJvYnVmLCBza2lwRnN5bmMpOwogCQkJCXBmcmVlKHplcm9idWYpOwpA QCAtMTUxNSw3ICsxNTY5LDcgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAogICogR2V0IG51bWJlciBvZiBibG9j a3MgcHJlc2VudCBpbiBhIHNpbmdsZSBkaXNrIGZpbGUKICAqLwogc3RhdGljIEJsb2NrTnVtYmVy Ci1fbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRW ZWMgKnNlZykKK19tZG5ibG9ja3MoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBNZGZkVmVjICpzZWcpCiB7CiAJb2ZmX3QJCWxlbjsKIApAQCAtMTUzOCw3ICsxNTkyLDcg QEAgX21kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZk VmVjICpzZWcpCiBpbnQKIG1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAq cGF0aCkKIHsKLQlTTWdyUmVsYXRpb24gcmVsbiA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkKTsKKwlNZFNNZ3JSZWxhdGlvbiByZWxuID0gKE1kU01nclJlbGF0aW9u KSBzbWdyb3BlbihmdGFnLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CiAJRmlsZQkJZmls ZTsKIAlpbnN0cl90aW1lCWlvX3N0YXJ0OwogCWJvb2wJCW5lZWRfdG9fY2xvc2U7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9zbWdyL3NtZ3IuYwppbmRleCBmNzZjNDYwNWRiLi5kMzcyMDI2MDlmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv c21nci9zbWdyLmMKQEAgLTE5LDc3ICsxOSwyMyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9tZC5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInV0 aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCiAKIAotLyoKLSAqIFRoaXMgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJz IGRlZmluZXMgdGhlIEFQSSBiZXR3ZWVuIHNtZ3IuYyBhbmQKLSAqIGFueSBpbmRpdmlkdWFsIHN0 b3JhZ2UgbWFuYWdlciBtb2R1bGUuICBOb3RlIHRoYXQgc21nciBzdWJmdW5jdGlvbnMgYXJlCi0g KiBnZW5lcmFsbHkgZXhwZWN0ZWQgdG8gcmVwb3J0IHByb2JsZW1zIHZpYSBlbG9nKEVSUk9SKS4g IEFuIGV4Y2VwdGlvbiBpcwotICogdGhhdCBzbWdyX3VubGluayBzaG91bGQgdXNlIGVsb2coV0FS TklORyksIHJhdGhlciB0aGFuIGVycm9yaW5nIG91dCwKLSAqIGJlY2F1c2Ugd2Ugbm9ybWFsbHkg dW5saW5rIHJlbGF0aW9ucyBkdXJpbmcgcG9zdC1jb21taXQvYWJvcnQgY2xlYW51cCwKLSAqIGFu ZCBzbyBpdCdzIHRvbyBsYXRlIHRvIHJhaXNlIGFuIGVycm9yLiAgQWxzbywgdmFyaW91cyBjb25k aXRpb25zIHRoYXQKLSAqIHdvdWxkIG5vcm1hbGx5IGJlIGVycm9ycyBzaG91bGQgYmUgYWxsb3dl ZCBkdXJpbmcgYm9vdHN0cmFwIGFuZC9vciBXQUwKLSAqIHJlY292ZXJ5IC0tLSBzZWUgY29tbWVu dHMgaW4gbWQuYyBmb3IgZGV0YWlscy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZl9zbWdyCi17Ci0J dm9pZAkJKCpzbWdyX2luaXQpICh2b2lkKTsJLyogbWF5IGJlIE5VTEwgKi8KLQl2b2lkCQkoKnNt Z3Jfc2h1dGRvd24pICh2b2lkKTsJLyogbWF5IGJlIE5VTEwgKi8KLQl2b2lkCQkoKnNtZ3Jfb3Bl bikgKFNNZ3JSZWxhdGlvbiByZWxuKTsKLQl2b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfY3JlYXRlKSAoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8p OwotCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdW5saW5rKSAoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCWJvb2wgaXNSZWRvKTsKLQl2b2lk CQkoKnNtZ3JfZXh0ZW5kKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwK LQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNvbnN0IHZvaWQgKmJ1ZmZlciwgYm9vbCBz a2lwRnN5bmMpOwotCXZvaWQJCSgqc21ncl96ZXJvZXh0ZW5kKSAoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQg bmJsb2NrcywgYm9vbCBza2lwRnN5bmMpOwotCWJvb2wJCSgqc21ncl9wcmVmZXRjaCkgKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgQmxvY2tOdW1iZXIg YmxvY2tudW0pOwotCXZvaWQJCSgqc21ncl9yZWFkKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKLQkJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCB2b2lkICpidWZm ZXIpOwotCXZvaWQJCSgqc21ncl93cml0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sCi0JCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNvbnN0IHZvaWQgKmJ1 ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotCXZvaWQJCSgqc21ncl93cml0ZWJhY2spIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkgICBCbG9ja051bWJlciBi bG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci0JQmxvY2tOdW1iZXIgKCpzbWdyX25ibG9j a3MpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNt Z3JfdHJ1bmNhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJ CQkJCQkgIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLX0gZl9zbWdyOwotCi1zdGF0 aWMgY29uc3QgZl9zbWdyIHNtZ3Jzd1tdID0gewotCS8qIG1hZ25ldGljIGRpc2sgKi8KLQl7Ci0J CS5zbWdyX2luaXQgPSBtZGluaXQsCi0JCS5zbWdyX3NodXRkb3duID0gTlVMTCwKLQkJLnNtZ3Jf b3BlbiA9IG1kb3BlbiwKLQkJLnNtZ3JfY2xvc2UgPSBtZGNsb3NlLAotCQkuc21ncl9jcmVhdGUg PSBtZGNyZWF0ZSwKLQkJLnNtZ3JfZXhpc3RzID0gbWRleGlzdHMsCi0JCS5zbWdyX3VubGluayA9 IG1kdW5saW5rLAotCQkuc21ncl9leHRlbmQgPSBtZGV4dGVuZCwKLQkJLnNtZ3JfemVyb2V4dGVu ZCA9IG1kemVyb2V4dGVuZCwKLQkJLnNtZ3JfcHJlZmV0Y2ggPSBtZHByZWZldGNoLAotCQkuc21n cl9yZWFkID0gbWRyZWFkLAotCQkuc21ncl93cml0ZSA9IG1kd3JpdGUsCi0JCS5zbWdyX3dyaXRl YmFjayA9IG1kd3JpdGViYWNrLAotCQkuc21ncl9uYmxvY2tzID0gbWRuYmxvY2tzLAotCQkuc21n cl90cnVuY2F0ZSA9IG1kdHJ1bmNhdGUsCi0JCS5zbWdyX2ltbWVkc3luYyA9IG1kaW1tZWRzeW5j LAotCX0KLX07CitzdGF0aWMgZl9zbWdyICpzbWdyc3c7CiAKLXN0YXRpYyBjb25zdCBpbnQgTlNt Z3IgPSBsZW5ndGhvZihzbWdyc3cpOworc3RhdGljIGludCBOU21nciA9IDA7CisKK3N0YXRpYyBT aXplIExhcmdlc3RTTWdyUmVsYXRpb25TaXplID0gMDsKIAogLyoKICAqIEVhY2ggYmFja2VuZCBo YXMgYSBoYXNodGFibGUgdGhhdCBzdG9yZXMgYWxsIGV4dGFudCBTTWdyUmVsYXRpb24gb2JqZWN0 cy4KQEAgLTEwMiw2ICs0OCw1NyBAQCBzdGF0aWMgZGxpc3RfaGVhZCB1bm93bmVkX3JlbG5zOwog LyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIHZvaWQgc21ncnNodXRkb3du KGludCBjb2RlLCBEYXR1bSBhcmcpOwogCitTTWdySWQKK3NtZ3JfcmVnaXN0ZXIoY29uc3QgZl9z bWdyICpzbWdyLCBTaXplIHNtZ3JyZWxhdGlvbl9zaXplKQoreworCVNNZ3JJZCBteV9pZDsKKwlN ZW1vcnlDb250ZXh0IG9sZDsKKworCWlmIChwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmll c19kb25lKQorCQllbG9nKEZBVEFMLCAiU01ncnMgbXVzdCBiZSByZWdpc3RlcmVkIGluIHRoZSBz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgcGhhc2UiKTsKKwlpZiAoTlNtZ3IgPT0gTWF4U01ncklk KQorCQllbG9nKEZBVEFMLCAiVG9vIG1hbnkgc21ncnMgcmVnaXN0ZXJlZCIpOworCWlmIChzbWdy LT5uYW1lID09IE5VTEwgfHwgKnNtZ3ItPm5hbWUgPT0gMCkKKwkJZWxvZyhGQVRBTCwgInNtZ3Ig cmVnaXN0ZXJlZCB3aXRoIGludmFsaWQgbmFtZSIpOworCisJQXNzZXJ0KHNtZ3ItPnNtZ3Jfb3Bl biAhPSBOVUxMKTsKKwlBc3NlcnQoc21nci0+c21ncl9jbG9zZSAhPSBOVUxMKTsKKwlBc3NlcnQo c21nci0+c21ncl9jcmVhdGUgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfZXhpc3RzICE9 IE5VTEwpOworCUFzc2VydChzbWdyLT5zbWdyX3VubGluayAhPSBOVUxMKTsKKwlBc3NlcnQoc21n ci0+c21ncl9leHRlbmQgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfemVyb2V4dGVuZCAh PSBOVUxMKTsKKwlBc3NlcnQoc21nci0+c21ncl9wcmVmZXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQo c21nci0+c21ncl9yZWFkICE9IE5VTEwpOworCUFzc2VydChzbWdyLT5zbWdyX3dyaXRlICE9IE5V TEwpOworCUFzc2VydChzbWdyLT5zbWdyX3dyaXRlYmFjayAhPSBOVUxMKTsKKwlBc3NlcnQoc21n ci0+c21ncl9uYmxvY2tzICE9IE5VTEwpOworCUFzc2VydChzbWdyLT5zbWdyX3RydW5jYXRlICE9 IE5VTEwpOworCUFzc2VydChzbWdyLT5zbWdyX2ltbWVkc3luYyAhPSBOVUxMKTsKKwlvbGQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlteV9pZCA9IE5TbWdy Kys7CisJaWYgKG15X2lkID09IDApCisJCXNtZ3JzdyA9IHBhbGxvYyhzaXplb2YoZl9zbWdyKSk7 CisJZWxzZQorCQlzbWdyc3cgPSByZXBhbGxvYyhzbWdyc3csIHNpemVvZihmX3NtZ3IpICogTlNt Z3IpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CisKKwlwZ19jb21waWxlcl9iYXJy aWVyKCk7CisKKwlpZiAoIXNtZ3JzdykKKwl7CisJCU5TbWdyLS07CisJCWVsb2coRkFUQUwsICJG YWlsZWQgdG8gZXh0ZW5kIHNtZ3IgYXJyYXkiKTsKKwl9CisKKwltZW1jcHkoJnNtZ3Jzd1tteV9p ZF0sIHNtZ3IsIHNpemVvZihmX3NtZ3IpKTsKKworCUxhcmdlc3RTTWdyUmVsYXRpb25TaXplID0g TWF4KExhcmdlc3RTTWdyUmVsYXRpb25TaXplLCBzbWdycmVsYXRpb25fc2l6ZSk7CisKKwlyZXR1 cm4gbXlfaWQ7Cit9CiAKIC8qCiAgKiBzbWdyaW5pdCgpLCBzbWdyc2h1dGRvd24oKSAtLSBJbml0 aWFsaXplIG9yIHNodXQgZG93biBzdG9yYWdlCkBAIC0xNTcsOSArMTU0LDExIEBAIHNtZ3JvcGVu KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKIAl7CiAJCS8qIEZp cnN0IHRpbWUgdGhyb3VnaDogaW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSAqLwogCQlIQVNIQ1RM CQljdGw7CisJCUxhcmdlc3RTTWdyUmVsYXRpb25TaXplID0gTUFYQUxJR04oTGFyZ2VzdFNNZ3JS ZWxhdGlvblNpemUpOworCQlBc3NlcnQoTlNtZ3IgPiAwKTsKIAogCQljdGwua2V5c2l6ZSA9IHNp emVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpOwotCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFNN Z3JSZWxhdGlvbkRhdGEpOworCQljdGwuZW50cnlzaXplID0gTGFyZ2VzdFNNZ3JSZWxhdGlvblNp emU7CiAJCVNNZ3JSZWxhdGlvbkhhc2ggPSBoYXNoX2NyZWF0ZSgic21nciByZWxhdGlvbiB0YWJs ZSIsIDQwMCwKIAkJCQkJCQkJCSAgICZjdGwsIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwogCQlk bGlzdF9pbml0KCZ1bm93bmVkX3JlbG5zKTsKQEAgLTE4MCw3ICsxNzksOCBAQCBzbWdyb3BlbihS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpCiAJCXJlbG4tPnNtZ3Jf dGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCQlmb3IgKGludCBpID0gMDsgaSA8PSBN QVhfRk9SS05VTTsgKytpKQogCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tpXSA9IEludmFs aWRCbG9ja051bWJlcjsKLQkJcmVsbi0+c21ncl93aGljaCA9IDA7CS8qIHdlIG9ubHkgaGF2ZSBt ZC5jIGF0IHByZXNlbnQgKi8KKworCQlyZWxuLT5zbWdyX3doaWNoID0gTWRTTWdySWQ7CS8qIHdl IG9ubHkgaGF2ZSBtZC5jIGF0IHByZXNlbnQgKi8KIAogCQkvKiBpbXBsZW1lbnRhdGlvbi1zcGVj aWZpYyBpbml0aWFsaXphdGlvbiAqLwogCQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9v cGVuKHJlbG4pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IGE2MDQ0MzIxMjYuLmRh YjRiZTgwYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTQyLDYgKzQyLDcgQEAK ICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Zk LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL21kLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCkBAIC0xOTksNiArMjAwLDkgQEAgSW5pdFN0 YW5kYWxvbmVQcm9jZXNzKGNvbnN0IGNoYXIgKmFyZ3YwKQogCUluaXRQcm9jZXNzTG9jYWxMYXRj aCgpOwogCUluaXRpYWxpemVMYXRjaFdhaXRTZXQoKTsKIAorCS8qIEluaXRpYWxpemUgc21ncnMg Ki8KKwlyZWdpc3Rlcl9idWlsdGluX2R5bmFtaWNfbWFuYWdlcnMoKTsKKwogCS8qCiAJICogRm9y IGNvbnNpc3RlbmN5IHdpdGggSW5pdFBvc3RtYXN0ZXJDaGlsZCwgaW5pdGlhbGl6ZSBzaWduYWwg bWFzayBoZXJlLgogCSAqIEJ1dCB3ZSBkb24ndCB1bmJsb2NrIFNJR1FVSVQgb3IgcHJvdmlkZSBh IGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCkBAIC0xODY4LDYgKzE4NzIsMTQgQEAgcHJvY2Vzc19z ZXNzaW9uX3ByZWxvYWRfbGlicmFyaWVzKHZvaWQpCiAJCQkJICAgdHJ1ZSk7CiB9CiAKKy8qCisg KiBSZWdpc3RlciBhbnkgaW50ZXJuYWwgbWFuYWdlcnMuCisgKi8KK3ZvaWQgcmVnaXN0ZXJfYnVp bHRpbl9keW5hbWljX21hbmFnZXJzKHZvaWQpCit7CisJbWRzbWdyX3JlZ2lzdGVyKCk7Cit9CisK IC8qCiAgKiBwcm9jZXNzIGFueSBzaGFyZWQgbWVtb3J5IHJlcXVlc3RzIGZyb20gcHJlbG9hZGVk IGxpYnJhcmllcwogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDE0YmQ1NzRmYzIuLjhmNTNiNjM1MWMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCkBAIC00ODgsNiArNDg4LDcgQEAgZXh0ZXJuIHZvaWQgVG91Y2hTb2NrZXRMb2NrRmlsZXMo dm9pZCk7CiBleHRlcm4gdm9pZCBBZGRUb0RhdGFEaXJMb2NrRmlsZShpbnQgdGFyZ2V0X2xpbmUs IGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gYm9vbCBSZWNoZWNrRGF0YURpckxvY2tGaWxlKHZv aWQpOwogZXh0ZXJuIHZvaWQgVmFsaWRhdGVQZ1ZlcnNpb24oY29uc3QgY2hhciAqcGF0aCk7Citl eHRlcm4gdm9pZCByZWdpc3Rlcl9idWlsdGluX2R5bmFtaWNfbWFuYWdlcnModm9pZCk7CiBleHRl cm4gdm9pZCBwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyh2b2lkKTsKIGV4dGVybiB2 b2lkIHByb2Nlc3Nfc2Vzc2lvbl9wcmVsb2FkX2xpYnJhcmllcyh2b2lkKTsKIGV4dGVybiB2b2lk IHByb2Nlc3Nfc2htZW1fcmVxdWVzdHModm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL21kLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKaW5kZXggOTQxODc5ZWU2YS4u YmVlZGRmZDM3MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbWQuaApAQCAtMTksNiArMTksMTAgQEAKICNpbmNsdWRlICJzdG9y YWdlL3NtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKIAorLyogcmVnaXN0cmF0aW9u IGZ1bmN0aW9uIGZvciBtZCBzdG9yYWdlIG1hbmFnZXIgKi8KK2V4dGVybiB2b2lkIG1kc21ncl9y ZWdpc3Rlcih2b2lkKTsKK2V4dGVybiBTTWdySWQgTWRTTWdySWQ7CisKIC8qIG1kIHN0b3JhZ2Ug bWFuYWdlciBmdW5jdGlvbmFsaXR5ICovCiBleHRlcm4gdm9pZCBtZGluaXQodm9pZCk7CiBleHRl cm4gdm9pZCBtZG9wZW4oU01nclJlbGF0aW9uIHJlbG4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRleCBhOWEx NzlhYWJhLi41YWQxZDUwZTBjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaApAQCAtMTgsNiArMTgsMTAgQEAKICNp bmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRv ci5oIgogCit0eXBlZGVmIHVpbnQ4IFNNZ3JJZDsKKworI2RlZmluZSBNYXhTTWdySWQgVUlOVDhf TUFYCisKIC8qCiAgKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nclJlbGF0aW9uIG9i amVjdHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseQogICogY2FjaGVkIGZpbGUgaGFuZGxlcy4gIEFu IFNNZ3JSZWxhdGlvbiBpcyBjcmVhdGVkIChpZiBub3QgYWxyZWFkeSBwcmVzZW50KQpAQCAtNTks MTQgKzYzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIEZpZWxkcyBi ZWxvdyBoZXJlIGFyZSBpbnRlbmRlZCB0byBiZSBwcml2YXRlIHRvIHNtZ3IuYyBhbmQgaXRzCiAJ ICogc3VibW9kdWxlcy4gIERvIG5vdCB0b3VjaCB0aGVtIGZyb20gZWxzZXdoZXJlLgogCSAqLwot CWludAkJCXNtZ3Jfd2hpY2g7CQkvKiBzdG9yYWdlIG1hbmFnZXIgc2VsZWN0b3IgKi8KLQotCS8q Ci0JICogZm9yIG1kLmM7IHBlci1mb3JrIGFycmF5cyBvZiB0aGUgbnVtYmVyIG9mIG9wZW4gc2Vn bWVudHMKLQkgKiAobWRfbnVtX29wZW5fc2VncykgYW5kIHRoZSBzZWdtZW50cyB0aGVtc2VsdmVz IChtZF9zZWdfZmRzKS4KLQkgKi8KLQlpbnQJCQltZF9udW1fb3Blbl9zZWdzW01BWF9GT1JLTlVN ICsgMV07Ci0Jc3RydWN0IF9NZGZkVmVjICptZF9zZWdfZmRzW01BWF9GT1JLTlVNICsgMV07CisJ U01ncklkCQlzbWdyX3doaWNoOwkJLyogc3RvcmFnZSBtYW5hZ2VyIHNlbGVjdG9yICovCisJaW50 CQkJc21ncnJlbGF0aW9uX3NpemU7CS8qIHNpemUgb2YgdGhpcyBzdHJ1Y3QsIGluY2wuIHNtZ3It c3BlY2lmaWMgZGF0YSAqLwogCiAJLyogaWYgdW5vd25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2Yg YWxsIHVub3duZWQgU01nclJlbGF0aW9ucyAqLwogCWRsaXN0X25vZGUJbm9kZTsKQEAgLTc3LDYg Kzc1LDQ4IEBAIHR5cGVkZWYgU01nclJlbGF0aW9uRGF0YSAqU01nclJlbGF0aW9uOwogI2RlZmlu ZSBTbWdySXNUZW1wKHNtZ3IpIFwKIAlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAoKHNtZ3Ip LT5zbWdyX3Jsb2NhdG9yKQogCisvKgorICogVGhpcyBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRl cnMgZGVmaW5lcyB0aGUgQVBJIGJldHdlZW4gc21nci5jIGFuZAorICogYW55IGluZGl2aWR1YWwg c3RvcmFnZSBtYW5hZ2VyIG1vZHVsZS4gIE5vdGUgdGhhdCBzbWdyIHN1YmZ1bmN0aW9ucyBhcmUK KyAqIGdlbmVyYWxseSBleHBlY3RlZCB0byByZXBvcnQgcHJvYmxlbXMgdmlhIGVsb2coRVJST1Ip LiAgQW4gZXhjZXB0aW9uIGlzCisgKiB0aGF0IHNtZ3JfdW5saW5rIHNob3VsZCB1c2UgZWxvZyhX QVJOSU5HKSwgcmF0aGVyIHRoYW4gZXJyb3Jpbmcgb3V0LAorICogYmVjYXVzZSB3ZSBub3JtYWxs eSB1bmxpbmsgcmVsYXRpb25zIGR1cmluZyBwb3N0LWNvbW1pdC9hYm9ydCBjbGVhbnVwLAorICog YW5kIHNvIGl0J3MgdG9vIGxhdGUgdG8gcmFpc2UgYW4gZXJyb3IuICBBbHNvLCB2YXJpb3VzIGNv bmRpdGlvbnMgdGhhdAorICogd291bGQgbm9ybWFsbHkgYmUgZXJyb3JzIHNob3VsZCBiZSBhbGxv d2VkIGR1cmluZyBib290c3RyYXAgYW5kL29yIFdBTAorICogcmVjb3ZlcnkgLS0tIHNlZSBjb21t ZW50cyBpbiBtZC5jIGZvciBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBmX3NtZ3IKK3sK Kwljb25zdCBjaGFyICpuYW1lOworCXZvaWQJCSgqc21ncl9pbml0KSAodm9pZCk7CQkvKiBtYXkg YmUgTlVMTCAqLworCXZvaWQJCSgqc21ncl9zaHV0ZG93bikgKHZvaWQpOwkvKiBtYXkgYmUgTlVM TCAqLworCXZvaWQJCSgqc21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4pOworCXZvaWQJCSgq c21ncl9jbG9zZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworCXZv aWQJCSgqc21ncl9jcmVhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAorCQkJCQkJCQlib29sIGlzUmVkbyk7CisJYm9vbAkJKCpzbWdyX2V4aXN0cykgKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworCXZvaWQJCSgqc21ncl91bmxpbmspIChS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJ CQkJYm9vbCBpc1JlZG8pOworCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgY29u c3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7CisJdm9pZAkJKCpzbWdyX3plcm9leHRl bmQpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQkJQmxv Y2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxvY2tzLCBib29sIHNraXBGc3luYyk7CisJYm9vbAkJ KCpzbWdyX3ByZWZldGNoKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwK KwkJCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSk7CisJdm9pZAkJKCpzbWdyX3JlYWQpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCSAgQmxvY2tOdW1i ZXIgYmxvY2tudW0sIHZvaWQgKmJ1ZmZlcik7CisJdm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkgICBCbG9ja051bWJlciBi bG9ja251bSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7CisJdm9pZAkJKCpz bWdyX3dyaXRlYmFjaykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJ CQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKTsKKwlC bG9ja051bWJlciAoKnNtZ3JfbmJsb2NrcykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pOworCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCSAgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CisJdm9p ZAkJKCpzbWdyX2ltbWVkc3luYykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0pOworfSBmX3NtZ3I7CisKK2V4dGVybiBTTWdySWQgc21ncl9yZWdpc3Rlcihjb25zdCBmX3Nt Z3IgKnNtZ3IsIFNpemUgc21ncnJlbGF0aW9uX3NpemUpOworCiBleHRlcm4gdm9pZCBzbWdyaW5p dCh2b2lkKTsKIGV4dGVybiBTTWdyUmVsYXRpb24gc21ncm9wZW4oUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kKTsKIGV4dGVybiBib29sIHNtZ3JleGlzdHMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0tIAoyLjM5LjAKCg== --000000000000cc837e05ff57eee8 Content-Type: application/octet-stream; name="v1-0002-Prototype-Allow-tablespaces-to-specify-which-SMGR.patch" Content-Disposition: attachment; filename="v1-0002-Prototype-Allow-tablespaces-to-specify-which-SMGR.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljijglag1 RnJvbSA4ZGIzZTczYTZmZTYwYzExNDMzNWE0NzQzMmE4MGVjYjQ0N2I5MzU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMzAgSnVuIDIwMjMgMTQ6MTU6MzYgKzAyMDAKU3Vi amVjdDogW1BBVENIIHYxIDIvMl0gUHJvdG90eXBlOiBBbGxvdyB0YWJsZXNwYWNlcyB0byBzcGVj aWZ5IHdoaWNoIFNNR1IKIHRoZXkgdXNlCgpUaGlzIGFsbG93cyBmb3IgdGFibGVzcGFjZXMgdGhh dCBhcmUgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgoKRm9yIG5vdywgdGhl IGRlZmF1bHQgdGFibGVzcGFjZXMgKHBnX2RlZmF1bHQgYW5kIHBnX2dsb2JhbCkgYXJlIHN0aWxs CmRlcGVuZGVudCBvbiB0aGUgbWQuYyBzbWdyLCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzIG1heSBj aGFuZ2UgYXMgd2VsbC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvdGJsc3BjZGVz Yy5jIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZXNwYWNlLmMgICAgICAgIHwg MTgyICsrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgfCAgMzIgKysrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgICAgICAg ICAgICB8IDIxNCArKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9z bWdyL3NtZ3IuYyAgICAgICAgICB8ICA3MiArKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvc3BjY2FjaGUuYyAgICAgICB8ICAzOCArKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Rh Ymxlc3BhY2UuZGF0ICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3RhYmxlc3Bh Y2UuaCAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlc3BhY2UuaCAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaCAgICAgICAgICAgICAgICAgfCAgMTAgKysK IHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oICAgICAgICAgICAgICAgfCAgMjAgKystCiBzcmMv aW5jbHVkZS91dGlscy9zcGNjYWNoZS5oICAgICAgICAgICAgIHwgICAyICsKIDEzIGZpbGVzIGNo YW5nZWQsIDQwNyBpbnNlcnRpb25zKCspLCAxNzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3RibHNwY2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy90YmxzcGNkZXNjLmMKaW5kZXggYjhjODlmOGM1NC4uMDRjYzE1ZTEyMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3RibHNwY2Rlc2MuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvdGJsc3BjZGVzYy5jCkBAIC0yNyw3ICsyNyw3 IEBAIHRibHNwY19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK IAl7CiAJCXhsX3RibHNwY19jcmVhdGVfcmVjICp4bHJlYyA9ICh4bF90YmxzcGNfY3JlYXRlX3Jl YyAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBcIiVzXCIiLCB4bHJlYy0+ dHNfaWQsIHhscmVjLT50c19wYXRoKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBcIiVz XCIiLCB4bHJlYy0+dHNfaWQsIE5hbWVTdHIoeGxyZWMtPnRzX3NtZ3IpKTsKIAl9CiAJZWxzZSBp ZiAoaW5mbyA9PSBYTE9HX1RCTFNQQ19EUk9QKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlc3BhY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2Uu YwppbmRleCAxM2IwZGVlMTQ2Li5iM2RhNGExYjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZXNwYWNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVzcGFj ZS5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9iZ3dyaXRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL21kLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zdGFuZGJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCkBAIC05Miw4ICs5Myw2IEBA IGJvb2wJCWFsbG93X2luX3BsYWNlX3RhYmxlc3BhY2VzID0gZmFsc2U7CiAKIE9pZAkJCWJpbmFy eV91cGdyYWRlX25leHRfcGdfdGFibGVzcGFjZV9vaWQgPSBJbnZhbGlkT2lkOwogCi1zdGF0aWMg dm9pZCBjcmVhdGVfdGFibGVzcGFjZV9kaXJlY3Rvcmllcyhjb25zdCBjaGFyICpsb2NhdGlvbiwK LQkJCQkJCQkJCQkgIGNvbnN0IE9pZCB0YWJsZXNwYWNlb2lkKTsKIHN0YXRpYyBib29sIGRlc3Ry b3lfdGFibGVzcGFjZV9kaXJlY3RvcmllcyhPaWQgdGFibGVzcGFjZW9pZCwgYm9vbCByZWRvKTsK IAogCkBAIC0yMTgsMTAgKzIxNyw4IEBAIENyZWF0ZVRhYmxlU3BhY2UoQ3JlYXRlVGFibGVTcGFj ZVN0bXQgKnN0bXQpCiAJYm9vbAkJbnVsbHNbTmF0dHNfcGdfdGFibGVzcGFjZV0gPSB7MH07CiAJ SGVhcFR1cGxlCXR1cGxlOwogCU9pZAkJCXRhYmxlc3BhY2VvaWQ7Ci0JY2hhcgkgICAqbG9jYXRp b247CiAJT2lkCQkJb3duZXJJZDsKIAlEYXR1bQkJbmV3T3B0aW9uczsKLQlib29sCQlpbl9wbGFj ZTsKIAogCS8qIE11c3QgYmUgc3VwZXJ1c2VyICovCiAJaWYgKCFzdXBlcnVzZXIoKSkKQEAgLTIz Nyw0NyArMjM0LDcgQEAgQ3JlYXRlVGFibGVTcGFjZShDcmVhdGVUYWJsZVNwYWNlU3RtdCAqc3Rt dCkKIAllbHNlCiAJCW93bmVySWQgPSBHZXRVc2VySWQoKTsKIAotCS8qIFVuaXgtaWZ5IHRoZSBv ZmZlcmVkIHBhdGgsIGFuZCBzdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2hlcyAqLwotCWxvY2F0aW9u ID0gcHN0cmR1cChzdG10LT5sb2NhdGlvbik7Ci0JY2Fub25pY2FsaXplX3BhdGgobG9jYXRpb24p OwotCi0JLyogZGlzYWxsb3cgcXVvdGVzLCBlbHNlIENSRUFURSBEQVRBQkFTRSB3b3VsZCBiZSBh dCByaXNrICovCi0JaWYgKHN0cmNocihsb2NhdGlvbiwgJ1wnJykpCi0JCWVyZXBvcnQoRVJST1Is Ci0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX05BTUUpLAotCQkJCSBlcnJtc2coInRhYmxl c3BhY2UgbG9jYXRpb24gY2Fubm90IGNvbnRhaW4gc2luZ2xlIHF1b3RlcyIpKSk7Ci0KLQlpbl9w bGFjZSA9IGFsbG93X2luX3BsYWNlX3RhYmxlc3BhY2VzICYmIHN0cmxlbihsb2NhdGlvbikgPT0g MDsKLQotCS8qCi0JICogQWxsb3dpbmcgcmVsYXRpdmUgcGF0aHMgc2VlbXMgcmlza3kKLQkgKgot CSAqIFRoaXMgYWxzbyBoZWxwcyB1cyBlbnN1cmUgdGhhdCBsb2NhdGlvbiBpcyBub3QgZW1wdHkg b3Igd2hpdGVzcGFjZSwKLQkgKiB1bmxlc3Mgc3BlY2lmeWluZyBhIGRldmVsb3Blci1vbmx5IGlu LXBsYWNlIHRhYmxlc3BhY2UuCi0JICovCi0JaWYgKCFpbl9wbGFjZSAmJiAhaXNfYWJzb2x1dGVf cGF0aChsb2NhdGlvbikpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKLQkJCQkgZXJybXNnKCJ0YWJsZXNwYWNlIGxvY2F0 aW9uIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCIpKSk7Ci0KLQkvKgotCSAqIENoZWNrIHRoYXQg bG9jYXRpb24gaXNuJ3QgdG9vIGxvbmcuIFJlbWVtYmVyIHRoYXQgd2UncmUgZ29pbmcgdG8gYXBw ZW5kCi0JICogJ1BHX1hYWC88ZGJvaWQ+LzxyZWxpZD5fPGZvcms+Ljxubm4+Jy4gIEZZSSwgd2Ug bmV2ZXIgYWN0dWFsbHkKLQkgKiByZWZlcmVuY2UgdGhlIHdob2xlIHBhdGggaGVyZSwgYnV0IE1h a2VQR0RpcmVjdG9yeSgpIHVzZXMgdGhlIGZpcnN0IHR3bwotCSAqIHBhcnRzLgotCSAqLwotCWlm IChzdHJsZW4obG9jYXRpb24pICsgMSArIHN0cmxlbihUQUJMRVNQQUNFX1ZFUlNJT05fRElSRUNU T1JZKSArIDEgKwotCQlPSURDSEFSUyArIDEgKyBPSURDSEFSUyArIDEgKyBGT1JLTkFNRUNIQVJT ICsgMSArIE9JRENIQVJTID4gTUFYUEdQQVRIKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCi0JCQkJIGVycm1zZygidGFi bGVzcGFjZSBsb2NhdGlvbiBcIiVzXCIgaXMgdG9vIGxvbmciLAotCQkJCQkJbG9jYXRpb24pKSk7 Ci0KLQkvKiBXYXJuIGlmIHRoZSB0YWJsZXNwYWNlIGlzIGluIHRoZSBkYXRhIGRpcmVjdG9yeS4g Ki8KLQlpZiAocGF0aF9pc19wcmVmaXhfb2ZfcGF0aChEYXRhRGlyLCBsb2NhdGlvbikpCi0JCWVy ZXBvcnQoV0FSTklORywKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklO SVRJT04pLAotCQkJCSBlcnJtc2coInRhYmxlc3BhY2UgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSBp bnNpZGUgdGhlIGRhdGEgZGlyZWN0b3J5IikpKTsKKwlzbWdydmFsaWRhdGV0c3BvcHRzKHN0bXQt PnNtZ3IsIHN0bXQtPnNtZ3JvcHRzKTsKIAogCS8qCiAJICogRGlzYWxsb3cgY3JlYXRpb24gb2Yg dGFibGVzcGFjZXMgbmFtZWQgInBnX3h4eCI7IHdlIHJlc2VydmUgdGhpcwpAQCAtMzM0LDYgKzI5 MSw4IEBAIENyZWF0ZVRhYmxlU3BhY2UoQ3JlYXRlVGFibGVTcGFjZVN0bXQgKnN0bXQpCiAJdmFs dWVzW0FudW1fcGdfdGFibGVzcGFjZV9vaWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0odGFibGVz cGFjZW9pZCk7CiAJdmFsdWVzW0FudW1fcGdfdGFibGVzcGFjZV9zcGNuYW1lIC0gMV0gPQogCQlE aXJlY3RGdW5jdGlvbkNhbGwxKG5hbWVpbiwgQ1N0cmluZ0dldERhdHVtKHN0bXQtPnRhYmxlc3Bh Y2VuYW1lKSk7CisJdmFsdWVzW0FudW1fcGdfdGFibGVzcGFjZV9zcGNzbWdyIC0gMV0gPQorCQlE aXJlY3RGdW5jdGlvbkNhbGwxKG5hbWVpbiwgQ1N0cmluZ0dldERhdHVtKHN0bXQtPnNtZ3IpKTsK IAl2YWx1ZXNbQW51bV9wZ190YWJsZXNwYWNlX3NwY293bmVyIC0gMV0gPQogCQlPYmplY3RJZEdl dERhdHVtKG93bmVySWQpOwogCW51bGxzW0FudW1fcGdfdGFibGVzcGFjZV9zcGNhY2wgLSAxXSA9 IHRydWU7CkBAIC0zNjAsMTggKzMxOSwyMiBAQCBDcmVhdGVUYWJsZVNwYWNlKENyZWF0ZVRhYmxl U3BhY2VTdG10ICpzdG10KQogCS8qIFBvc3QgY3JlYXRpb24gaG9vayBmb3IgbmV3IHRhYmxlc3Bh Y2UgKi8KIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhUYWJsZVNwYWNlUmVsYXRpb25JZCwg dGFibGVzcGFjZW9pZCwgMCk7CiAKLQljcmVhdGVfdGFibGVzcGFjZV9kaXJlY3Rvcmllcyhsb2Nh dGlvbiwgdGFibGVzcGFjZW9pZCk7CisJc21ncmNyZWF0ZXRzcChzdG10LT5zbWdyLCB0YWJsZXNw YWNlb2lkLCBzdG10LT5zbWdyb3B0cywgMCk7CiAKIAkvKiBSZWNvcmQgdGhlIGZpbGVzeXN0ZW0g Y2hhbmdlIGluIFhMT0cgKi8KIAl7Ci0JCXhsX3RibHNwY19jcmVhdGVfcmVjIHhscmVjOworCQl4 bF90YmxzcGNfY3JlYXRlX3JlYyB4bHJlYyA9IHswfTsKKwkJRGF0dW0Jc21ncm9wdHM7CiAKIAkJ eGxyZWMudHNfaWQgPSB0YWJsZXNwYWNlb2lkOworCQltZW1jcHkoJnhscmVjLnRzX3NtZ3IsIHN0 bXQtPnNtZ3IsIHN0cmxlbihzdG10LT5zbWdyKSk7CisJCXNtZ3JvcHRzID0gdHJhbnNmb3JtUmVs T3B0aW9ucygoRGF0dW0pIDAsIHN0bXQtPnNtZ3JvcHRzLAorCQkJCQkJCQkJICAgTlVMTCwgTlVM TCwgZmFsc2UsIGZhbHNlKTsKIAogCQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJWExvZ1JlZ2lzdGVy RGF0YSgoY2hhciAqKSAmeGxyZWMsCi0JCQkJCQkgb2Zmc2V0b2YoeGxfdGJsc3BjX2NyZWF0ZV9y ZWMsIHRzX3BhdGgpKTsKLQkJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSBsb2NhdGlvbiwgc3Ry bGVuKGxvY2F0aW9uKSArIDEpOworCQkJCQkJIG9mZnNldG9mKHhsX3RibHNwY19jcmVhdGVfcmVj LCB0c19zbWdyb3B0cykpOworCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopIHNtZ3JvcHRzLCBW QVJTSVpFX0FOWShzbWdyb3B0cykpOwogCiAJCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX1RCTFNQQ19J RCwgWExPR19UQkxTUENfQ1JFQVRFKTsKIAl9CkBAIC0zODQsOCArMzQ3LDYgQEAgQ3JlYXRlVGFi bGVTcGFjZShDcmVhdGVUYWJsZVNwYWNlU3RtdCAqc3RtdCkKIAkgKi8KIAlGb3JjZVN5bmNDb21t aXQoKTsKIAotCXBmcmVlKGxvY2F0aW9uKTsKLQogCS8qIFdlIGtlZXAgdGhlIGxvY2sgb24gcGdf dGFibGVzcGFjZSB1bnRpbCBjb21taXQgKi8KIAl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CiAK QEAgLTQwMSw2ICszNjIsNyBAQCB2b2lkCiBEcm9wVGFibGVTcGFjZShEcm9wVGFibGVTcGFjZVN0 bXQgKnN0bXQpCiB7CiAJY2hhcgkgICAqdGFibGVzcGFjZW5hbWUgPSBzdG10LT50YWJsZXNwYWNl bmFtZTsKKwljaGFyCSAgICpzbWdybmFtZTsKIAlUYWJsZVNjYW5EZXNjIHNjYW5kZXNjOwogCVJl bGF0aW9uCXJlbDsKIAlIZWFwVHVwbGUJdHVwbGU7CkBAIC00NDQsNiArNDA2LDcgQEAgRHJvcFRh YmxlU3BhY2UoRHJvcFRhYmxlU3BhY2VTdG10ICpzdG10KQogCiAJc3BjZm9ybSA9IChGb3JtX3Bn X3RhYmxlc3BhY2UpIEdFVFNUUlVDVCh0dXBsZSk7CiAJdGFibGVzcGFjZW9pZCA9IHNwY2Zvcm0t Pm9pZDsKKwlzbWdybmFtZSA9IHBzdHJkdXAoTmFtZVN0cihzcGNmb3JtLT5zcGNzbWdyKSk7CiAK IAkvKiBNdXN0IGJlIHRhYmxlc3BhY2Ugb3duZXIgKi8KIAlpZiAoIW9iamVjdF9vd25lcmNoZWNr KFRhYmxlU3BhY2VSZWxhdGlvbklkLCB0YWJsZXNwYWNlb2lkLCBHZXRVc2VySWQoKSkpCkBAIC00 OTIsNiArNDU1LDggQEAgRHJvcFRhYmxlU3BhY2UoRHJvcFRhYmxlU3BhY2VTdG10ICpzdG10KQog CSAqLwogCUxXTG9ja0FjcXVpcmUoVGFibGVzcGFjZUNyZWF0ZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CiAKKwlzbWdyZHJvcHRzcChzbWdybmFtZSwgdGFibGVzcGFjZW9pZCwgZmFsc2UpOworCiAJLyoK IAkgKiBUcnkgdG8gcmVtb3ZlIHRoZSBwaHlzaWNhbCBpbmZyYXN0cnVjdHVyZS4KIAkgKi8KQEAg LTU2NywxMTQgKzUzMiw2IEBAIERyb3BUYWJsZVNwYWNlKERyb3BUYWJsZVNwYWNlU3RtdCAqc3Rt dCkKIAl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CiB9CiAKLQotLyoKLSAqIGNyZWF0ZV90YWJs ZXNwYWNlX2RpcmVjdG9yaWVzCi0gKgotICoJQXR0ZW1wdCB0byBjcmVhdGUgZmlsZXN5c3RlbSBp bmZyYXN0cnVjdHVyZSBsaW5raW5nICRQR0RBVEEvcGdfdGJsc3BjLwotICoJdG8gdGhlIHNwZWNp ZmllZCBkaXJlY3RvcnkKLSAqLwotc3RhdGljIHZvaWQKLWNyZWF0ZV90YWJsZXNwYWNlX2RpcmVj dG9yaWVzKGNvbnN0IGNoYXIgKmxvY2F0aW9uLCBjb25zdCBPaWQgdGFibGVzcGFjZW9pZCkKLXsK LQljaGFyCSAgICpsaW5rbG9jOwotCWNoYXIJICAgKmxvY2F0aW9uX3dpdGhfdmVyc2lvbl9kaXI7 Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JYm9vbAkJaW5fcGxhY2U7Ci0KLQlsaW5rbG9jID0gcHNwcmlu dGYoInBnX3RibHNwYy8ldSIsIHRhYmxlc3BhY2VvaWQpOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBh c2tlZCB0byBtYWtlIGFuICdpbiBwbGFjZScgdGFibGVzcGFjZSwgY3JlYXRlIHRoZSBkaXJlY3Rv cnkKLQkgKiBkaXJlY3RseSB3aGVyZSB0aGUgc3ltbGluayB3b3VsZCBub3JtYWxseSBnby4gIFRo aXMgaXMgYSBkZXZlbG9wZXItb25seQotCSAqIG9wdGlvbiBmb3Igbm93LCB0byBmYWNpbGl0YXRl IHJlZ3Jlc3Npb24gdGVzdGluZy4KLQkgKi8KLQlpbl9wbGFjZSA9IHN0cmxlbihsb2NhdGlvbikg PT0gMDsKLQotCWlmIChpbl9wbGFjZSkKLQl7Ci0JCWlmIChNYWtlUEdEaXJlY3RvcnkobGlua2xv YykgPCAwICYmIGVycm5vICE9IEVFWElTVCkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGRp cmVjdG9yeSBcIiVzXCI6ICVtIiwKLQkJCQkJCQlsaW5rbG9jKSkpOwotCX0KLQotCWxvY2F0aW9u X3dpdGhfdmVyc2lvbl9kaXIgPSBwc3ByaW50ZigiJXMvJXMiLCBpbl9wbGFjZSA/IGxpbmtsb2Mg OiBsb2NhdGlvbiwKLQkJCQkJCQkJCQkgVEFCTEVTUEFDRV9WRVJTSU9OX0RJUkVDVE9SWSk7Ci0K LQkvKgotCSAqIEF0dGVtcHQgdG8gY29lcmNlIHRhcmdldCBkaXJlY3RvcnkgdG8gc2FmZSBwZXJt aXNzaW9ucy4gIElmIHRoaXMgZmFpbHMsCi0JICogaXQgZG9lc24ndCBleGlzdCBvciBoYXMgdGhl IHdyb25nIG93bmVyLiAgTm90IG5lZWRlZCBmb3IgaW4tcGxhY2UgbW9kZSwKLQkgKiBiZWNhdXNl IGluIHRoYXQgY2FzZSB3ZSBjcmVhdGVkIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgZGVzaXJlZAot CSAqIHBlcm1pc3Npb25zLgotCSAqLwotCWlmICghaW5fcGxhY2UgJiYgY2htb2QobG9jYXRpb24s IHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKLQl7Ci0JCWlmIChlcnJubyA9PSBFTk9FTlQpCi0J CQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GSUxFKSwK LQkJCQkJIGVycm1zZygiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIGxvY2F0aW9u KSwKLQkJCQkJIEluUmVjb3ZlcnkgPyBlcnJoaW50KCJDcmVhdGUgdGhpcyBkaXJlY3RvcnkgZm9y IHRoZSB0YWJsZXNwYWNlIGJlZm9yZSAiCi0JCQkJCQkJCQkJICAicmVzdGFydGluZyB0aGUgc2Vy dmVyLiIpIDogMCkpOwotCQllbHNlCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHNldCBwZXJtaXNzaW9u cyBvbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbG9jYXRpb24pKSk7Ci0JfQotCi0J LyoKLQkgKiBUaGUgY3JlYXRpb24gb2YgdGhlIHZlcnNpb24gZGlyZWN0b3J5IHByZXZlbnRzIG1v cmUgdGhhbiBvbmUgdGFibGVzcGFjZQotCSAqIGluIGEgc2luZ2xlIGxvY2F0aW9uLiAgVGhpcyBp bWl0YXRlcyBUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZSgpLCBidXQgaXQKLQkgKiBpZ25vcmVzIGNv bmN1cnJlbmN5IGFuZCBtaXNzaW5nIHBhcmVudCBkaXJlY3Rvcmllcy4gIFRoZSBjaG1vZCgpIHdv dWxkCi0JICogaGF2ZSBmYWlsZWQgaW4gdGhlIGFic2VuY2Ugb2YgYSBwYXJlbnQuICBwZ190YWJs ZXNwYWNlX3NwY25hbWVfaW5kZXgKLQkgKiBwcmV2ZW50cyBjb25jdXJyZW5jeS4KLQkgKi8KLQlp ZiAoc3RhdChsb2NhdGlvbl93aXRoX3ZlcnNpb25fZGlyLCAmc3QpIDwgMCkKLQl7Ci0JCWlmIChl cnJubyAhPSBFTk9FTlQpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3JfZmls ZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZGlyZWN0b3J5IFwiJXNc IjogJW0iLAotCQkJCQkJCWxvY2F0aW9uX3dpdGhfdmVyc2lvbl9kaXIpKSk7Ci0JCWVsc2UgaWYg KE1ha2VQR0RpcmVjdG9yeShsb2NhdGlvbl93aXRoX3ZlcnNpb25fZGlyKSA8IDApCi0JCQllcmVw b3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1z ZygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCi0JCQkJCQkJbG9jYXRp b25fd2l0aF92ZXJzaW9uX2RpcikpKTsKLQl9Ci0JZWxzZSBpZiAoIVNfSVNESVIoc3Quc3RfbW9k ZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1Rf VFlQRSksCi0JCQkJIGVycm1zZygiXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5 IiwKLQkJCQkJCWxvY2F0aW9uX3dpdGhfdmVyc2lvbl9kaXIpKSk7Ci0JZWxzZSBpZiAoIUluUmVj b3ZlcnkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfSU5f VVNFKSwKLQkJCQkgZXJybXNnKCJkaXJlY3RvcnkgXCIlc1wiIGFscmVhZHkgaW4gdXNlIGFzIGEg dGFibGVzcGFjZSIsCi0JCQkJCQlsb2NhdGlvbl93aXRoX3ZlcnNpb25fZGlyKSkpOwotCi0JLyoK LQkgKiBJbiByZWNvdmVyeSwgcmVtb3ZlIG9sZCBzeW1saW5rLCBpbiBjYXNlIGl0IHBvaW50cyB0 byB0aGUgd3JvbmcgcGxhY2UuCi0JICovCi0JaWYgKCFpbl9wbGFjZSAmJiBJblJlY292ZXJ5KQot CQlyZW1vdmVfdGFibGVzcGFjZV9zeW1saW5rKGxpbmtsb2MpOwotCi0JLyoKLQkgKiBDcmVhdGUg dGhlIHN5bWxpbmsgdW5kZXIgUEdEQVRBCi0JICovCi0JaWYgKCFpbl9wbGFjZSAmJiBzeW1saW5r KGxvY2F0aW9uLCBsaW5rbG9jKSA8IDApCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBzeW1ib2xp YyBsaW5rIFwiJXNcIjogJW0iLAotCQkJCQkJbGlua2xvYykpKTsKLQotCXBmcmVlKGxpbmtsb2Mp OwotCXBmcmVlKGxvY2F0aW9uX3dpdGhfdmVyc2lvbl9kaXIpOwotfQotCi0KIC8qCiAgKiBkZXN0 cm95X3RhYmxlc3BhY2VfZGlyZWN0b3JpZXMKICAqCkBAIC0xNTI0LDkgKzEzODEsMTIgQEAgdGJs c3BjX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJaWYgKGluZm8gPT0gWExPR19UQkxT UENfQ1JFQVRFKQogCXsKIAkJeGxfdGJsc3BjX2NyZWF0ZV9yZWMgKnhscmVjID0gKHhsX3RibHNw Y19jcmVhdGVfcmVjICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7Ci0JCWNoYXIJICAgKmxvY2F0 aW9uID0geGxyZWMtPnRzX3BhdGg7CisJCXNtZ3JjcmVhdGV0c3AoTmFtZVN0cih4bHJlYy0+dHNf c21nciksIHhscmVjLT50c19pZCwKKwkJCQkJICB1bnRyYW5zZm9ybVJlbE9wdGlvbnMoKERhdHVt KSAmeGxyZWMtPnRzX3NtZ3JvcHRzKSwgdHJ1ZSk7CiAKLQkJY3JlYXRlX3RhYmxlc3BhY2VfZGly ZWN0b3JpZXMobG9jYXRpb24sIHhscmVjLT50c19pZCk7CisJCS8qCisJCSAqIGNyZWF0ZV90YWJs ZXNwYWNlX2RpcmVjdG9yaWVzKGxvY2F0aW9uLCB4bHJlYy0+dHNfaWQpOworCQkgKi8KIAl9CiAJ ZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1RCTFNQQ19EUk9QKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDM5 YWI3ZWFjMGQuLjQ5NzQyNTUzZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNjAsNiArNjAsNyBAQAogI2lu Y2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNp bmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL21kLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGV0aW1lLmgiCiAjaW5jbHVkZSAi dXRpbHMvbnVtZXJpYy5oIgpAQCAtMzk0LDYgKzM5NSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJCQkJb3B0X2lubGluZV9oYW5kbGVyIG9wdF92YWxpZGF0b3IgdmFsaWRhdG9yX2NsYXVz ZQogCQkJCW9wdF9jb2xsYXRlCiAKKyV0eXBlIDxub2RlPglPcHRUYWJsZVNwYWNlU3RvcmFnZQor CiAldHlwZSA8cmFuZ2U+CXF1YWxpZmllZF9uYW1lIGluc2VydF90YXJnZXQgT3B0Q29uc3RyRnJv bVRhYmxlCiAKICV0eXBlIDxzdHI+CQlhbGxfT3AgTWF0aE9wCkBAIC00OTMxLDE4ICs0OTM0LDM1 IEBAIG9wdF9wcm9jZWR1cmFsOgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJCVFVRVJZ OgotICogICAgICAgICAgICAgQ1JFQVRFIFRBQkxFU1BBQ0UgdGFibGVzcGFjZSBMT0NBVElPTiAn L3BhdGgvdG8vdGFibGVzcGFjZS8nCisgKiAgICAgICAgICAgICBDUkVBVEUgVEFCTEVTUEFDRSB0 YWJsZXNwYWNlCisgKiAgICAgICAgICAgICAgICAgWyBPV05FUiByb2xlIF0KKyAqICAgICAgICAg ICAgICAgICBbIExPQ0FUSU9OICcvcGF0aC90by90YWJsZXNwYWNlLycgfCBVU0lORyBzbWdyICgg b3B0aW9uIFssIC4uLl0gKSBdCisgKiAgICAgICAgICAgICAgICAgWyBXSVRIICggb3B0aW9uIFsg LCAuLi4gXSApIF0KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLUNyZWF0ZVRhYmxlU3Bh Y2VTdG10OiBDUkVBVEUgVEFCTEVTUEFDRSBuYW1lIE9wdFRhYmxlU3BhY2VPd25lciBMT0NBVElP TiBTY29uc3Qgb3B0X3JlbG9wdGlvbnMKK0NyZWF0ZVRhYmxlU3BhY2VTdG10OiBDUkVBVEUgVEFC TEVTUEFDRSBuYW1lIE9wdFRhYmxlU3BhY2VPd25lciBPcHRUYWJsZVNwYWNlU3RvcmFnZSBvcHRf cmVsb3B0aW9ucwogCQkJCXsKLQkJCQkJQ3JlYXRlVGFibGVTcGFjZVN0bXQgKm4gPSBtYWtlTm9k ZShDcmVhdGVUYWJsZVNwYWNlU3RtdCk7Ci0KKwkJCQkJQ3JlYXRlVGFibGVTcGFjZVN0bXQgKm4g PSAoQ3JlYXRlVGFibGVTcGFjZVN0bXQgKikgJDU7CiAJCQkJCW4tPnRhYmxlc3BhY2VuYW1lID0g JDM7CiAJCQkJCW4tPm93bmVyID0gJDQ7Ci0JCQkJCW4tPmxvY2F0aW9uID0gJDY7Ci0JCQkJCW4t Pm9wdGlvbnMgPSAkNzsKKwkJCQkJbi0+b3B0aW9ucyA9ICQ2OworCQkJCQkkJCA9IChOb2RlICop IG47CisJCQkJfQorCQk7CisKK09wdFRhYmxlU3BhY2VTdG9yYWdlOiBMT0NBVElPTiBTY29uc3QK KwkJCQl7CisJCQkJCUNyZWF0ZVRhYmxlU3BhY2VTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlVGFi bGVTcGFjZVN0bXQpOworCQkJCQluLT5zbWdyID0gTURfU01HUl9OQU1FOworCQkJCQluLT5zbWdy b3B0cyA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oImxvY2F0aW9uIiwgKE5vZGUgKikgbWFrZVN0 cmluZygkMiksIEAxKSk7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IFVTSU5H IG5hbWUgJygnIHV0aWxpdHlfb3B0aW9uX2xpc3QgJyknCisJCQkJeworCQkJCQlDcmVhdGVUYWJs ZVNwYWNlU3RtdCAqbiA9IG1ha2VOb2RlKENyZWF0ZVRhYmxlU3BhY2VTdG10KTsKKwkJCQkJbi0+ c21nciA9ICQyOworCQkJCQluLT5zbWdyb3B0cyA9ICQ0OwogCQkJCQkkJCA9IChOb2RlICopIG47 CiAJCQkJfQogCQk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDY5MGJkZDI3YzUuLmRmYzVhMTFk YTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCkBAIC0yMiwxMiArMjIsMTYgQEAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAj aW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9n dXRpbHMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CkBAIC0xNTYsNiArMTYwLDkgQEAgdm9pZCBtZHNtZ3JfcmVnaXN0ZXIodm9pZCkKIAkJLnNtZ3Jf bmJsb2NrcyA9IG1kbmJsb2NrcywKIAkJLnNtZ3JfdHJ1bmNhdGUgPSBtZHRydW5jYXRlLAogCQku c21ncl9pbW1lZHN5bmMgPSBtZGltbWVkc3luYywKKwkJLnNtZ3JfdmFsaWRhdGVfdHNwb3B0cyA9 IG1kdmFsaWRhdGV0c3BvcHRzLAorCQkuc21ncl9jcmVhdGVfdHNwID0gbWRjcmVhdGV0c3AsCisJ CS5zbWdyX2Ryb3BfdHNwID0gbWRkcm9wdHNwLAogCX07CiAKIAlNZFNNZ3JJZCA9IHNtZ3JfcmVn aXN0ZXIoJm1kX3NtZ3IsIHNpemVvZihNZFNNZ3JSZWxhdGlvbkRhdGEpKTsKQEAgLTIxMyw2ICsy MjAsNyBAQCBtZGluaXQodm9pZCkKIGJvb2wKIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pCiB7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJl bGF0aW9uKSByZWxuOwogCS8qCiAJICogQ2xvc2UgaXQgZmlyc3QsIHRvIGVuc3VyZSB0aGF0IHdl IG5vdGljZSBpZiB0aGUgZm9yayBoYXMgYmVlbiB1bmxpbmtlZAogCSAqIHNpbmNlIHdlIG9wZW5l ZCBpdC4gIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgY2FuIHNraXAgdGhhdCBpbiByZWNvdmVyeSwK QEAgLTIyMSw3ICsyMjksNyBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKQogCWlmICghSW5SZWNvdmVyeSkKIAkJbWRjbG9zZShyZWxuLCBmb3JrbnVtKTsK IAotCXJldHVybiAobWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05fUkVUVVJOX05V TEwpICE9IE5VTEwpOworCXJldHVybiAobWRvcGVuZm9yayhtZHJlbG4sIGZvcmtudW0sIEVYVEVO U0lPTl9SRVRVUk5fTlVMTCkgIT0gTlVMTCk7CiB9CiAKIC8qCkBAIC0xNjcyLDMgKzE2ODAsMjA3 IEBAIG1kZmlsZXRhZ21hdGNoZXMoY29uc3QgRmlsZVRhZyAqZnRhZywgY29uc3QgRmlsZVRhZyAq Y2FuZGlkYXRlKQogCSAqLwogCXJldHVybiBmdGFnLT5ybG9jYXRvci5kYk9pZCA9PSBjYW5kaWRh dGUtPnJsb2NhdG9yLmRiT2lkOwogfQorCit2b2lkIG1kdmFsaWRhdGV0c3BvcHRzKExpc3QgKm9w dHMpCit7CisJTGlzdENlbGwgICAqb3B0aW9uOworCWNoYXIJICAgKmxvY2F0aW9uOworCWJvb2wJ CWluX3BsYWNlOworCisJaWYgKGxpc3RfbGVuZ3RoKG9wdHMpICE9IDEpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX05BTUUpLAorCQkJCSBlcnJtc2coInRv byBtYW55IHN0b3JhZ2Ugb3B0aW9ucyBmb3IgdGhlICVzIHN0b3JhZ2UgbWFuYWdlciIsIE1EX1NN R1JfTkFNRSksCisJCQkJIGVycmhpbnQoIk9ubHkgTE9DQVRJT04gaXMgc3VwcG9ydGVkIikpKTsK KworCWZvcmVhY2gob3B0aW9uLCBvcHRzKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSBsZmly c3Rfbm9kZShEZWZFbGVtLCBvcHRpb24pOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJsb2NhdGlvbiIpID09IDApCisJCXsKKwkJCWxvY2F0aW9uID0gcHN0cmR1cChkZWZHZXRTdHJp bmcoZGVmZWwpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pc2Vk IG9wdGlvbiAnJXMnIGZvciB0byB0aGUgJXMgc3RvcmFnZSBtYW5hZ2VyIiwKKwkJCQkJCQlkZWZl bC0+ZGVmbmFtZSwgTURfU01HUl9OQU1FKSwKKwkJCQkJIGVycmhpbnQoIk9ubHkgJ2xvY2F0aW9u JyBpcyBzdXBwb3J0ZWQiKSksCisJCQkJCSBlcnJwb3NpdGlvbihkZWZlbC0+bG9jYXRpb24pKTsK KwkJfQorCX0KKworCS8qIFVuaXgtaWZ5IHRoZSBvZmZlcmVkIHBhdGgsIGFuZCBzdHJpcCBhbnkg dHJhaWxpbmcgc2xhc2hlcyAqLworCWNhbm9uaWNhbGl6ZV9wYXRoKGxvY2F0aW9uKTsKKworCS8q IGRpc2FsbG93IHF1b3RlcywgZWxzZSBDUkVBVEUgREFUQUJBU0Ugd291bGQgYmUgYXQgcmlzayAq LworCWlmIChzdHJjaHIobG9jYXRpb24sICdcJycpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9OQU1FKSwKKwkJCQkJZXJybXNnKCJ0YWJsZXNwYWNlIGxv Y2F0aW9uIGNhbm5vdCBjb250YWluIHNpbmdsZSBxdW90ZXMiKSkpOworCisJaW5fcGxhY2UgPSBh bGxvd19pbl9wbGFjZV90YWJsZXNwYWNlcyAmJiBzdHJsZW4obG9jYXRpb24pID09IDA7CisKKwkv KgorCSAqIEFsbG93aW5nIHJlbGF0aXZlIHBhdGhzIHNlZW1zIHJpc2t5CisJICoKKwkgKiBUaGlz IGFsc28gaGVscHMgdXMgZW5zdXJlIHRoYXQgbG9jYXRpb24gaXMgbm90IGVtcHR5IG9yIHdoaXRl c3BhY2UsCisJICogdW5sZXNzIHNwZWNpZnlpbmcgYSBkZXZlbG9wZXItb25seSBpbi1wbGFjZSB0 YWJsZXNwYWNlLgorCSAqLworCWlmICghaW5fcGxhY2UgJiYgIWlzX2Fic29sdXRlX3BhdGgobG9j YXRpb24pKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9P QkpFQ1RfREVGSU5JVElPTiksCisJCQkJCWVycm1zZygidGFibGVzcGFjZSBsb2NhdGlvbiBtdXN0 IGJlIGFuIGFic29sdXRlIHBhdGgiKSkpOworCisJLyoKKwkgKiBDaGVjayB0aGF0IGxvY2F0aW9u IGlzbid0IHRvbyBsb25nLiBSZW1lbWJlciB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFwcGVuZAorCSAq ICdQR19YWFgvPGRib2lkPi88cmVsaWQ+Xzxmb3JrPi48bm5uPicuICBGWUksIHdlIG5ldmVyIGFj dHVhbGx5CisJICogcmVmZXJlbmNlIHRoZSB3aG9sZSBwYXRoIGhlcmUsIGJ1dCBNYWtlUEdEaXJl Y3RvcnkoKSB1c2VzIHRoZSBmaXJzdCB0d28KKwkgKiBwYXJ0cy4KKwkgKi8KKwlpZiAoc3RybGVu KGxvY2F0aW9uKSArIDEgKyBzdHJsZW4oVEFCTEVTUEFDRV9WRVJTSU9OX0RJUkVDVE9SWSkgKyAx ICsKKwkJT0lEQ0hBUlMgKyAxICsgT0lEQ0hBUlMgKyAxICsgRk9SS05BTUVDSEFSUyArIDEgKyBP SURDSEFSUyA+IE1BWFBHUEFUSCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQllcnJtc2coInRhYmxlc3BhY2Ug bG9jYXRpb24gXCIlc1wiIGlzIHRvbyBsb25nIiwKKwkJCQkJCSAgIGxvY2F0aW9uKSkpOworCisJ LyogV2FybiBpZiB0aGUgdGFibGVzcGFjZSBpcyBpbiB0aGUgZGF0YSBkaXJlY3RvcnkuICovCisJ aWYgKHBhdGhfaXNfcHJlZml4X29mX3BhdGgoRGF0YURpciwgbG9jYXRpb24pKQorCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9O KSwKKwkJCQkJZXJybXNnKCJ0YWJsZXNwYWNlIGxvY2F0aW9uIHNob3VsZCBub3QgYmUgaW5zaWRl IHRoZSBkYXRhIGRpcmVjdG9yeSIpKSk7CisKKwlwZnJlZShsb2NhdGlvbik7Cit9CisKK3ZvaWQg bWRjcmVhdGV0c3AoT2lkIHRhYmxlc3BhY2VvaWQsIExpc3QgKm9wdHMsIGJvb2wgaXNyZWRvKQor eworCWNoYXIJICAgKmxvY2F0aW9uOworCURlZkVsZW0JICAgKmRlZmVsID0gKERlZkVsZW0gKikg bGluaXRpYWxfbm9kZShEZWZFbGVtLCBvcHRzKTsKKworCUFzc2VydChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJsb2NhdGlvbiIpID09IDApOworCUFzc2VydChsaXN0X2xlbmd0aChvcHRzKSA9PSAx KTsKKworCWxvY2F0aW9uID0gcHN0cmR1cChkZWZHZXRTdHJpbmcoZGVmZWwpKTsKKworCS8qIFVu aXgtaWZ5IHRoZSBvZmZlcmVkIHBhdGgsIGFuZCBzdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2hlcyAq LworCWNhbm9uaWNhbGl6ZV9wYXRoKGxvY2F0aW9uKTsKKworCWNyZWF0ZV90YWJsZXNwYWNlX2Rp cmVjdG9yaWVzKGxvY2F0aW9uLCB0YWJsZXNwYWNlb2lkKTsKKworCXBmcmVlKGxvY2F0aW9uKTsK K30KKwordm9pZCBtZGRyb3B0c3AoT2lkIHRzcCwgYm9vbCBpc3JlZG8pCit7CisJCit9CisKKy8q CisgKiBjcmVhdGVfdGFibGVzcGFjZV9kaXJlY3RvcmllcworICoKKyAqCUF0dGVtcHQgdG8gY3Jl YXRlIGZpbGVzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUgbGlua2luZyAkUEdEQVRBL3BnX3RibHNwYy8K KyAqCXRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CisgKi8KK3ZvaWQKK2NyZWF0ZV90YWJsZXNw YWNlX2RpcmVjdG9yaWVzKGNvbnN0IGNoYXIgKmxvY2F0aW9uLCBjb25zdCBPaWQgdGFibGVzcGFj ZW9pZCkKK3sKKwljaGFyCSAgICpsaW5rbG9jOworCWNoYXIJICAgKmxvY2F0aW9uX3dpdGhfdmVy c2lvbl9kaXI7CisJc3RydWN0IHN0YXQgc3Q7CisJYm9vbAkJaW5fcGxhY2U7CisKKwlsaW5rbG9j ID0gcHNwcmludGYoInBnX3RibHNwYy8ldSIsIHRhYmxlc3BhY2VvaWQpOworCisJLyoKKwkgKiBJ ZiB3ZSdyZSBhc2tlZCB0byBtYWtlIGFuICdpbiBwbGFjZScgdGFibGVzcGFjZSwgY3JlYXRlIHRo ZSBkaXJlY3RvcnkKKwkgKiBkaXJlY3RseSB3aGVyZSB0aGUgc3ltbGluayB3b3VsZCBub3JtYWxs eSBnby4gIFRoaXMgaXMgYSBkZXZlbG9wZXItb25seQorCSAqIG9wdGlvbiBmb3Igbm93LCB0byBm YWNpbGl0YXRlIHJlZ3Jlc3Npb24gdGVzdGluZy4KKwkgKi8KKwlpbl9wbGFjZSA9IHN0cmxlbihs b2NhdGlvbikgPT0gMDsKKworCWlmIChpbl9wbGFjZSkKKwl7CisJCWlmIChNYWtlUEdEaXJlY3Rv cnkobGlua2xvYykgPCAwICYmIGVycm5vICE9IEVFWElTVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJZXJybXNnKCJjb3VsZCBub3Qg Y3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkgICBsaW5rbG9jKSkpOworCX0K KworCWxvY2F0aW9uX3dpdGhfdmVyc2lvbl9kaXIgPSBwc3ByaW50ZigiJXMvJXMiLCBpbl9wbGFj ZSA/IGxpbmtsb2MgOiBsb2NhdGlvbiwKKwkJCQkJCQkJCQkgVEFCTEVTUEFDRV9WRVJTSU9OX0RJ UkVDVE9SWSk7CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gY29lcmNlIHRhcmdldCBkaXJlY3Rvcnkg dG8gc2FmZSBwZXJtaXNzaW9ucy4gIElmIHRoaXMgZmFpbHMsCisJICogaXQgZG9lc24ndCBleGlz dCBvciBoYXMgdGhlIHdyb25nIG93bmVyLiAgTm90IG5lZWRlZCBmb3IgaW4tcGxhY2UgbW9kZSwK KwkgKiBiZWNhdXNlIGluIHRoYXQgY2FzZSB3ZSBjcmVhdGVkIHRoZSBkaXJlY3Rvcnkgd2l0aCB0 aGUgZGVzaXJlZAorCSAqIHBlcm1pc3Npb25zLgorCSAqLworCWlmICghaW5fcGxhY2UgJiYgY2ht b2QobG9jYXRpb24sIHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKKwl7CisJCWlmIChlcnJubyA9 PSBFTk9FTlQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9GSUxFKSwKKwkJCQkJCWVycm1zZygiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBleGlz dCIsIGxvY2F0aW9uKSwKKwkJCQkJCUluUmVjb3ZlcnkgPyBlcnJoaW50KCJDcmVhdGUgdGhpcyBk aXJlY3RvcnkgZm9yIHRoZSB0YWJsZXNwYWNlIGJlZm9yZSAiCisJCQkJCQkJCQkJCSAicmVzdGFy dGluZyB0aGUgc2VydmVyLiIpIDogMCkpOworCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCWVycm1zZygiY291bGQgbm90IHNl dCBwZXJtaXNzaW9ucyBvbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQkJICAgbG9jYXRp b24pKSk7CisJfQorCisJLyoKKwkgKiBUaGUgY3JlYXRpb24gb2YgdGhlIHZlcnNpb24gZGlyZWN0 b3J5IHByZXZlbnRzIG1vcmUgdGhhbiBvbmUgdGFibGVzcGFjZQorCSAqIGluIGEgc2luZ2xlIGxv Y2F0aW9uLiAgVGhpcyBpbWl0YXRlcyBUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZSgpLCBidXQgaXQK KwkgKiBpZ25vcmVzIGNvbmN1cnJlbmN5IGFuZCBtaXNzaW5nIHBhcmVudCBkaXJlY3Rvcmllcy4g IFRoZSBjaG1vZCgpIHdvdWxkCisJICogaGF2ZSBmYWlsZWQgaW4gdGhlIGFic2VuY2Ugb2YgYSBw YXJlbnQuICBwZ190YWJsZXNwYWNlX3NwY25hbWVfaW5kZXgKKwkgKiBwcmV2ZW50cyBjb25jdXJy ZW5jeS4KKwkgKi8KKwlpZiAoc3RhdChsb2NhdGlvbl93aXRoX3ZlcnNpb25fZGlyLCAmc3QpIDwg MCkKKwl7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCWVycm1zZygiY291bGQgbm90IHN0YXQg ZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJCSAgIGxvY2F0aW9uX3dpdGhfdmVyc2lvbl9k aXIpKSk7CisJCWVsc2UgaWYgKE1ha2VQR0RpcmVjdG9yeShsb2NhdGlvbl93aXRoX3ZlcnNpb25f ZGlyKSA8IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKKwkJCQkJCWVycm1zZygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAl bSIsCisJCQkJCQkJICAgbG9jYXRpb25fd2l0aF92ZXJzaW9uX2RpcikpKTsKKwl9CisJZWxzZSBp ZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCWVycm1zZygiXCIlc1wiIGV4aXN0cyBi dXQgaXMgbm90IGEgZGlyZWN0b3J5IiwKKwkJCQkJCSAgIGxvY2F0aW9uX3dpdGhfdmVyc2lvbl9k aXIpKSk7CisJZWxzZSBpZiAoIUluUmVjb3ZlcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfSU5fVVNFKSwKKwkJCQkJZXJybXNnKCJkaXJlY3RvcnkgXCIl c1wiIGFscmVhZHkgaW4gdXNlIGFzIGEgdGFibGVzcGFjZSIsCisJCQkJCQkgICBsb2NhdGlvbl93 aXRoX3ZlcnNpb25fZGlyKSkpOworCisJLyoKKwkgKiBJbiByZWNvdmVyeSwgcmVtb3ZlIG9sZCBz eW1saW5rLCBpbiBjYXNlIGl0IHBvaW50cyB0byB0aGUgd3JvbmcgcGxhY2UuCisJICovCisJaWYg KCFpbl9wbGFjZSAmJiBJblJlY292ZXJ5KQorCQlyZW1vdmVfdGFibGVzcGFjZV9zeW1saW5rKGxp bmtsb2MpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIHN5bWxpbmsgdW5kZXIgUEdEQVRBCisJICov CisJaWYgKCFpbl9wbGFjZSAmJiBzeW1saW5rKGxvY2F0aW9uLCBsaW5rbG9jKSA8IDApCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCWVycm1z ZygiY291bGQgbm90IGNyZWF0ZSBzeW1ib2xpYyBsaW5rIFwiJXNcIjogJW0iLAorCQkJCQkJICAg bGlua2xvYykpKTsKKworCXBmcmVlKGxpbmtsb2MpOworCXBmcmVlKGxvY2F0aW9uX3dpdGhfdmVy c2lvbl9kaXIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3Iu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMKaW5kZXggZDM3MjAyNjA5Zi4uYjVj YjcyMDA2NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5j bHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC0y OSw3ICszMCw3IEBACiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxz L2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKLQorI2luY2x1ZGUgInV0aWxz L3NwY2NhY2hlLmgiCiAKIHN0YXRpYyBmX3NtZ3IgKnNtZ3JzdzsKIApAQCAtMTc0LDEzICsxNzUs MjUgQEAgc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5k KQogCS8qIEluaXRpYWxpemUgaXQgaWYgbm90IHByZXNlbnQgYmVmb3JlICovCiAJaWYgKCFmb3Vu ZCkKIAl7CisJCU9pZAkJdHNwaWQgPSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lk OwogCQkvKiBoYXNoX3NlYXJjaCBhbHJlYWR5IGZpbGxlZCBpbiB0aGUgbG9va3VwIGtleSAqLwog CQlyZWxuLT5zbWdyX293bmVyID0gTlVMTDsKIAkJcmVsbi0+c21ncl90YXJnYmxvY2sgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAJCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kp CiAJCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxpZEJsb2NrTnVtYmVyOwog Ci0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSBNZFNNZ3JJZDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQg cHJlc2VudCAqLworCQkvKgorCQkgKiBUaGVyZSBpcyBhIGNoaWNrZW4tYW5kLWVnZyBwcm9ibGVt IGZvciBkZXRlcm1pbmluZyB3aGljaCBzdG9yYWdlCisJCSAqIG1hbmFnZXIgdG8gdXNlIGZvciB0 aGUgZ2xvYmFsIHRhYmxlc3BhY2UsIGFzIHRoYXQgaG9sZHMgdGhlCisJCSAqIHBnX3RhYmxlc3Bh Y2UgdGFibGUgd2hpY2ggd2UnZCB1c2UgdG8gbG9vayB1cCB0aGlzIGluZm9ybWF0aW9uLgorCQkg KgorCQkgKiBBcyB0aGUgZ2xvYmFsIHRhYmxlc3BhY2UgY2FuJ3QgYmUgcmVwbGFjZWQsIHRoZSBk ZWZhdWx0IGlzIHVzZWQKKwkJICogaW5zdGVhZCwgd2hpY2ggaXMgdGhlIG1kLmMgc21nciAoTURf U01HUl9OQU1FKS4KKwkJICovCisJCWlmICh0c3BpZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCB8 fCB0c3BpZCA9PSBERUZBVUxUVEFCTEVTUEFDRV9PSUQpCisJCQlyZWxuLT5zbWdyX3doaWNoID0g Z2V0X3NtZ3JfaWQoTURfU01HUl9OQU1FLCBmYWxzZSk7CisJCWVsc2UKKwkJCXJlbG4tPnNtZ3Jf d2hpY2ggPSBnZXRfdGFibGVzcGFjZV9zbWdyaWQodHNwaWQpOwogCiAJCS8qIGltcGxlbWVudGF0 aW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCiAJCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNo XS5zbWdyX29wZW4ocmVsbik7CkBAIC03MjIsNiArNzM1LDYxIEBAIHNtZ3JpbW1lZHN5bmMoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAlzbWdyc3dbcmVsbi0+c21ncl93 aGljaF0uc21ncl9pbW1lZHN5bmMocmVsbiwgZm9ya251bSk7CiB9CiAKK3N0YXRpYyBjb25zdCBj aGFyICpyZWNlbnRfc21ncm5hbWUgPSBOVUxMOworc3RhdGljIFNNZ3JJZCByZWNlbnRfc21ncmlk ID0gLTE7CisKK3N0YXRpYyBTTWdySWQgZ2V0X3NtZ3JfYnlfbmFtZShjb25zdCBjaGFyICpzbWdy bmFtZSwgYm9vbCBtaXNzaW5nX29rKQoreworCWlmIChyZWNlbnRfc21ncm5hbWUgIT0gTlVMTCAm JiBzdHJjbXAoc21ncm5hbWUsIHJlY2VudF9zbWdybmFtZSkgPT0gMCkKKwkJcmV0dXJuIHJlY2Vu dF9zbWdyaWQ7CisKKwlmb3IgKFNNZ3JJZCBpZCA9IDA7IGlkIDwgTlNtZ3I7IGlkKyspCisJewor CQlmX3NtZ3IgKnNtZ3IgPSAmc21ncnN3W2lkXTsKKworCQlpZiAoc3RyY21wKHNtZ3JuYW1lLCBz bWdyLT5uYW1lKSA9PSAwKQorCQl7CisJCQlyZWNlbnRfc21ncm5hbWUgPSBzbWdyLT5uYW1lOwor CQkJcmVjZW50X3NtZ3JpZCA9IGlkOworCQkJcmV0dXJuIGlkOworCQl9CisJfQorCisJaWYgKG1p c3Npbmdfb2spCisJCXJldHVybiBJbnZhbGlkU21ncklkOworCisJZXJlcG9ydChFUlJPUiwKKwkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9OQU1FKSwKKwkJCSBlcnJtc2coImludmFsaWQgc21n ciAnJXMnIiwgc21ncm5hbWUpKSk7Cit9CisKKworU01ncklkIGdldF9zbWdyX2lkKGNvbnN0IGNo YXIgKnNtZ3JuYW1lLCBib29sIG1pc3Npbmdfb2spCit7CisJcmV0dXJuIGdldF9zbWdyX2J5X25h bWUoc21ncm5hbWUsIG1pc3Npbmdfb2spOworfQorCit2b2lkIHNtZ3J2YWxpZGF0ZXRzcG9wdHMo Y29uc3QgY2hhciAqc21ncm5hbWUsIExpc3QgKm9wdHMpCit7CisJU01ncklkIHNtZ3JpZCA9IGdl dF9zbWdyX2J5X25hbWUoc21ncm5hbWUsIGZhbHNlKTsKKworCXNtZ3Jzd1tzbWdyaWRdLnNtZ3Jf dmFsaWRhdGVfdHNwb3B0cyhvcHRzKTsKK30KKwordm9pZCBzbWdyY3JlYXRldHNwKGNvbnN0IGNo YXIgKnNtZ3JuYW1lLCBPaWQgdHNwLCBMaXN0ICpvcHRzLCBib29sIGlzcmVkbykKK3sKKwlTTWdy SWQgc21ncmlkID0gZ2V0X3NtZ3JfYnlfbmFtZShzbWdybmFtZSwgZmFsc2UpOworCisJc21ncnN3 W3NtZ3JpZF0uc21ncl9jcmVhdGVfdHNwKHRzcCwgb3B0cywgaXNyZWRvKTsKK30KKwordm9pZCBz bWdyZHJvcHRzcChjb25zdCBjaGFyICpzbWdybmFtZSwgT2lkIHRzcCwgYm9vbCBpc3JlZG8pCit7 CisJU01ncklkIHNtZ3JpZCA9IGdldF9zbWdyX2J5X25hbWUoc21ncm5hbWUsIGZhbHNlKTsKKwor CXNtZ3Jzd1tzbWdyaWRdLnNtZ3JfZHJvcF90c3AodHNwLCBpc3JlZG8pOworfQorCiAvKgogICog QXRFT1hhY3RfU01ncgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Nw Y2NhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9zcGNjYWNoZS5jCmluZGV4IDEzNmZk NzM3ZDMuLmNlN2U0MDNiNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Nw Y2NhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3BjY2FjaGUuYwpAQCAtMjQs NiArMjQsOCBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9v cHRpbWl6ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc21nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbWQuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9pbnZh bC5oIgpAQCAtMzgsNiArNDAsNyBAQCBzdGF0aWMgSFRBQiAqVGFibGVTcGFjZUNhY2hlSGFzaCA9 IE5VTEw7CiB0eXBlZGVmIHN0cnVjdAogewogCU9pZAkJCW9pZDsJCQkvKiBsb29rdXAga2V5IC0g bXVzdCBiZSBmaXJzdCAqLworCVNNZ3JJZAkJc21ncmlkOwkJCS8qIGNhY2hlZCBzdG9yYWdlIG1h bmFnZXIgaWQgKi8KIAlUYWJsZVNwYWNlT3B0cyAqb3B0czsJCS8qIG9wdGlvbnMsIG9yIE5VTEwg aWYgbm9uZSAqLwogfSBUYWJsZVNwYWNlQ2FjaGVFbnRyeTsKIApAQCAtOTgsNyArMTAxLDcgQEAg SW5pdGlhbGl6ZVRhYmxlU3BhY2VDYWNoZSh2b2lkKQogCiAvKgogICogZ2V0X3RhYmxlc3BhY2UK LSAqCQlGZXRjaCBUYWJsZVNwYWNlQ2FjaGVFbnRyeSBzdHJ1Y3R1cmUgZm9yIGEgc3BlY2lmaWVk IHRhYmxlIE9JRC4KKyAqCQlGZXRjaCBUYWJsZVNwYWNlQ2FjaGVFbnRyeSBzdHJ1Y3R1cmUgZm9y IGEgc3BlY2lmaWVkIHRhYmxlc3BhY2UgT0lELgogICoKICAqIFBvaW50ZXJzIHJldHVybmVkIGJ5 IHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBzdG9yZWQsIHNpbmNlIGEgY2FjaGUKICAqIGZs dXNoIHdpbGwgaW52YWxpZGF0ZSB0aGVtLgpAQCAtMTA5LDYgKzExMiw3IEBAIGdldF90YWJsZXNw YWNlKE9pZCBzcGNpZCkKIAlUYWJsZVNwYWNlQ2FjaGVFbnRyeSAqc3BjOwogCUhlYXBUdXBsZQl0 cDsKIAlUYWJsZVNwYWNlT3B0cyAqb3B0czsKKwlTTWdySWQJCXNtZ3JpZDsKIAogCS8qCiAJICog U2luY2Ugc3BjaWQgaXMgYWx3YXlzIGZyb20gYSBwZ19jbGFzcyB0dXBsZSwgSW52YWxpZE9pZCBp bXBsaWVzIHRoZQpAQCAtMTM1LDE4ICsxMzksMzIgQEAgZ2V0X3RhYmxlc3BhY2UoT2lkIHNwY2lk KQogCSAqLwogCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFRBQkxFU1BBQ0VPSUQsIE9iamVjdElkR2V0 RGF0dW0oc3BjaWQpKTsKIAlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCXsKIAkJb3B0cyA9 IE5VTEw7CisJCXNtZ3JpZCA9IEludmFsaWRTbWdySWQ7CisJfQogCWVsc2UKIAl7CiAJCURhdHVt CQlkYXR1bTsKIAkJYm9vbAkJaXNOdWxsOworCQljaGFyCSAgICpzbWdybmFtZTsKKwkJCisJCXNt Z3JuYW1lID0gTmFtZVN0cigqRGF0dW1HZXROYW1lKFN5c0NhY2hlR2V0QXR0cihUQUJMRVNQQUNF T0lELAorCQkJCQkJCQkJCQkJCQkgdHAsCisJCQkJCQkJCQkJCQkJCSBBbnVtX3BnX3RhYmxlc3Bh Y2Vfc3Bjc21nciwKKwkJCQkJCQkJCQkJCQkJICZpc051bGwpKSk7CisKKwkJQXNzZXJ0KCFpc051 bGwpOworCQlzbWdyaWQgPSBnZXRfc21ncl9pZChzbWdybmFtZSwgZmFsc2UpOwogCiAJCWRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFRBQkxFU1BBQ0VPSUQsCiAJCQkJCQkJCXRwLAogCQkJCQkJCQlB bnVtX3BnX3RhYmxlc3BhY2Vfc3Bjb3B0aW9ucywKIAkJCQkJCQkJJmlzTnVsbCk7CiAJCWlmIChp c051bGwpCisJCXsKIAkJCW9wdHMgPSBOVUxMOworCQl9CiAJCWVsc2UKIAkJewogCQkJYnl0ZWEJ ICAgKmJ5dGVhX29wdHMgPSB0YWJsZXNwYWNlX3JlbG9wdGlvbnMoZGF0dW0sIGZhbHNlKTsKQEAg LTE2Nyw2ICsxODUsOCBAQCBnZXRfdGFibGVzcGFjZShPaWQgc3BjaWQpCiAJCQkJCQkJCQkJCSAg IEhBU0hfRU5URVIsCiAJCQkJCQkJCQkJCSAgIE5VTEwpOwogCXNwYy0+b3B0cyA9IG9wdHM7CisJ c3BjLT5zbWdyaWQgPSBzbWdyaWQ7CisKIAlyZXR1cm4gc3BjOwogfQogCkBAIC0yMzUsMyArMjU1 LDE5IEBAIGdldF90YWJsZXNwYWNlX21haW50ZW5hbmNlX2lvX2NvbmN1cnJlbmN5KE9pZCBzcGNp ZCkKIAllbHNlCiAJCXJldHVybiBzcGMtPm9wdHMtPm1haW50ZW5hbmNlX2lvX2NvbmN1cnJlbmN5 OwogfQorCisvKgorICogZ2V0X3RhYmxlc3BhY2Vfc21ncmlkCisgKi8KK1NNZ3JJZAorZ2V0X3Rh Ymxlc3BhY2Vfc21ncmlkKE9pZCBzcGNpZCkKK3sKKwlUYWJsZVNwYWNlQ2FjaGVFbnRyeSAqc3Bj OworCQorCWlmIChzcGNpZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCB8fCBzcGNpZCA9PSBERUZB VUxUVEFCTEVTUEFDRV9PSUQpCisJCXJldHVybiBnZXRfc21ncl9pZChNRF9TTUdSX05BTUUsIGZh bHNlKTsKKworCXNwYyA9IGdldF90YWJsZXNwYWNlKHNwY2lkKTsKKworCXJldHVybiBzcGMtPnNt Z3JpZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdGFibGVzcGFjZS5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3RhYmxlc3BhY2UuZGF0CmluZGV4IDlmYmM5OGE0 NGQuLjVlMjA0Mjk2MTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdGFibGVz cGFjZS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190YWJsZXNwYWNlLmRhdApAQCAt MTMsOCArMTMsMTAgQEAKIFsKIAogeyBvaWQgPT4gJzE2NjMnLCBvaWRfc3ltYm9sID0+ICdERUZB VUxUVEFCTEVTUEFDRV9PSUQnLAotICBzcGNuYW1lID0+ICdwZ19kZWZhdWx0Jywgc3BjYWNsID0+ ICdfbnVsbF8nLCBzcGNvcHRpb25zID0+ICdfbnVsbF8nIH0sCisgIHNwY25hbWUgPT4gJ3BnX2Rl ZmF1bHQnLCBzcGNhY2wgPT4gJ19udWxsXycsIHNwY3NtZ3IgPT4gJ21kJywKKyAgc3Bjb3B0aW9u cyA9PiAnX251bGxfJyB9LAogeyBvaWQgPT4gJzE2NjQnLCBvaWRfc3ltYm9sID0+ICdHTE9CQUxU QUJMRVNQQUNFX09JRCcsCi0gIHNwY25hbWUgPT4gJ3BnX2dsb2JhbCcsIHNwY2FjbCA9PiAnX251 bGxfJywgc3Bjb3B0aW9ucyA9PiAnX251bGxfJyB9LAorICBzcGNuYW1lID0+ICdwZ19nbG9iYWwn LCBzcGNhY2wgPT4gJ19udWxsXycsIHNwY3NtZ3IgPT4gJ21kJywKKyAgc3Bjb3B0aW9ucyA9PiAn X251bGxfJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3RhYmxl c3BhY2UuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdGFibGVzcGFjZS5oCmluZGV4IGVhMTU5 M2Q4NzQuLjkzODU5MzNjMDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdGFi bGVzcGFjZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdGFibGVzcGFjZS5oCkBAIC0z MCw2ICszMCw3IEBAIENBVEFMT0cocGdfdGFibGVzcGFjZSwxMjEzLFRhYmxlU3BhY2VSZWxhdGlv bklkKSBCS0lfU0hBUkVEX1JFTEFUSU9OCiB7CiAJT2lkCQkJb2lkOwkJCS8qIG9pZCAqLwogCU5h bWVEYXRhCXNwY25hbWU7CQkvKiB0YWJsZXNwYWNlIG5hbWUgKi8KKwlOYW1lRGF0YQlzcGNzbWdy OwkJLyogdGFibGVzcGFjZSBzdG9yYWdlIG1hbmFnZXIgKi8KIAogCS8qIG93bmVyIG9mIHRhYmxl c3BhY2UgKi8KIAlPaWQJCQlzcGNvd25lciBCS0lfREVGQVVMVChQT1NUR1JFUykgQktJX0xPT0tV UChwZ19hdXRoaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVzcGFj ZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVzcGFjZS5oCmluZGV4IGYxOTYxYzE4MTMu LjE1MjIwZmZiOTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlc3BhY2Uu aAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZXNwYWNlLmgKQEAgLTI4LDcgKzI4LDgg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgYWxsb3dfaW5fcGxhY2VfdGFibGVzcGFjZXM7CiB0 eXBlZGVmIHN0cnVjdCB4bF90YmxzcGNfY3JlYXRlX3JlYwogewogCU9pZAkJCXRzX2lkOwotCWNo YXIJCXRzX3BhdGhbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyAqLworCU5hbWVEYXRhCXRzX3NtZ3I7CisJY2hhcgkJdHNfc21ncm9wdHNbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKIH0geGxfdGJsc3BjX2NyZWF0ZV9yZWM7CiAKIHR5cGVkZWYgc3RydWN0 IHhsX3RibHNwY19kcm9wX3JlYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGIzYmVjOTBlNTIu LmUxNjdhY2VjN2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTI2MTMsOCArMjYxMyw5IEBA IHR5cGVkZWYgc3RydWN0IENyZWF0ZVRhYmxlU3BhY2VTdG10CiB7CiAJTm9kZVRhZwkJdHlwZTsK IAljaGFyCSAgICp0YWJsZXNwYWNlbmFtZTsKKwljaGFyCSAgICpzbWdyOworCUxpc3QJICAgKnNt Z3JvcHRzOyAvKiBsaXN0IG9mIERlZkVsZW0gbm9kZXMgKi8KIAlSb2xlU3BlYyAgICpvd25lcjsK LQljaGFyCSAgICpsb2NhdGlvbjsKIAlMaXN0CSAgICpvcHRpb25zOwogfSBDcmVhdGVUYWJsZVNw YWNlU3RtdDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9tZC5oCmluZGV4IGJlZWRkZmQzNzMuLmEzOTdhYTFjMTAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL21k LmgKQEAgLTIxLDYgKzIxLDggQEAKIAogLyogcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciBtZCBz dG9yYWdlIG1hbmFnZXIgKi8KIGV4dGVybiB2b2lkIG1kc21ncl9yZWdpc3Rlcih2b2lkKTsKKwor I2RlZmluZSBNRF9TTUdSX05BTUUgIm1kIgogZXh0ZXJuIFNNZ3JJZCBNZFNNZ3JJZDsKIAogLyog bWQgc3RvcmFnZSBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgKi8KQEAgLTU1LDQgKzU3LDEyIEBAIGV4 dGVybiBpbnQJbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsK IGV4dGVybiBpbnQJbWR1bmxpbmtmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBh dGgpOwogZXh0ZXJuIGJvb2wgbWRmaWxldGFnbWF0Y2hlcyhjb25zdCBGaWxlVGFnICpmdGFnLCBj b25zdCBGaWxlVGFnICpjYW5kaWRhdGUpOwogCisvKiBtZCB0c3AgY2FsbGJhY2tzICovCitleHRl cm4gdm9pZCBtZHZhbGlkYXRldHNwb3B0cyhMaXN0ICpvcHRzKTsKK2V4dGVybiB2b2lkIG1kY3Jl YXRldHNwKE9pZCB0c3AsIExpc3QgKm9wdHMsIGJvb2wgaXNyZWRvKTsKK2V4dGVybiB2b2lkIG1k ZHJvcHRzcChPaWQgdHNwLCBib29sIGlzcmVkbyk7Cit2b2lkIGNyZWF0ZV90YWJsZXNwYWNlX2Rp cmVjdG9yaWVzKGNvbnN0IGNoYXIgKmxvY2F0aW9uLAorCQkJCQkJCQkgICBjb25zdCBPaWQgdGFi bGVzcGFjZW9pZCk7CisKKwogI2VuZGlmCQkJCQkJCS8qIE1EX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKaW5k ZXggNWFkMWQ1MGUwYy4uMTJhOWI1ZjAwZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKQEAgLTE1LDEyICsxNSwx OCBAQAogI2RlZmluZSBTTUdSX0gKIAogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUg Im5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogCi10eXBlZGVmIHVpbnQ4IFNNZ3JJZDsKKy8qCisg KiB2b2xhdGlsZSBJRCBvZiB0aGUgc21nci4gQWNyb3NzIHZhcmlvdXMgY29uZmlndXJhdGlvbnMg SURzIG1heSB2YXJ5LAorICogdHJ1ZSBpZGVudGl0eSBpcyB0aGUgbmFtZSBvZiBlYWNoIHNtZ3Iu IAorICovCit0eXBlZGVmIGludCBTTWdySWQ7CiAKLSNkZWZpbmUgTWF4U01ncklkIFVJTlQ4X01B WAorI2RlZmluZSBNYXhTTWdySWQJCUlOVF9NQVgKKyNkZWZpbmUgSW52YWxpZFNtZ3JJZAkoLTEp CiAKIC8qCiAgKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nclJlbGF0aW9uIG9iamVj dHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseQpAQCAtMTEzLDggKzExOSwxMyBAQCB0eXBlZGVmIHN0 cnVjdCBmX3NtZ3IKIAl2b2lkCQkoKnNtZ3JfdHJ1bmNhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCQkgIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwogCXZv aWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtKTsKKworCXZvaWQJCSgqc21ncl92YWxpZGF0ZV90c3BvcHRzKSAoTGlzdCAqdHNwb3B0cyk7 CisJdm9pZAkJKCpzbWdyX2NyZWF0ZV90c3ApIChPaWQgdHNwb2lkLCBMaXN0ICp0c3BvcHRzLCBi b29sIGlzcmVkbyk7CisJdm9pZAkJKCpzbWdyX2Ryb3BfdHNwKSAoT2lkIHRzcG9pZCwgYm9vbCBp c3JlZG8pOwogfSBmX3NtZ3I7CiAKK2V4dGVybiBTTWdySWQgZ2V0X3NtZ3JfaWQoY29uc3QgY2hh ciAqc21ncm5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4gU01ncklkIHNtZ3JfcmVnaXN0 ZXIoY29uc3QgZl9zbWdyICpzbWdyLCBTaXplIHNtZ3JyZWxhdGlvbl9zaXplKTsKIAogZXh0ZXJu IHZvaWQgc21ncmluaXQodm9pZCk7CkBAIC0xNDcsNiArMTU4LDExIEBAIGV4dGVybiBCbG9ja051 bWJlciBzbWdybmJsb2Nrc19jYWNoZWQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSk7CiBleHRlcm4gdm9pZCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgKmZvcmtudW0sCiAJCQkJCQkgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3Mp OwogZXh0ZXJuIHZvaWQgc21ncmltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKTsKKworZXh0ZXJuIHZvaWQgc21ncnZhbGlkYXRldHNwb3B0cyhjb25zdCBjaGFy ICpzbWdybmFtZSwgTGlzdCAqb3B0cyk7CitleHRlcm4gdm9pZCBzbWdyY3JlYXRldHNwKGNvbnN0 IGNoYXIgKnNtZ3JuYW1lLCBPaWQgdHNwLCBMaXN0ICpvcHRzLCBib29sIGlzcmVkbyk7CitleHRl cm4gdm9pZCBzbWdyZHJvcHRzcChjb25zdCBjaGFyICpzbWdybmFtZSwgT2lkIHRzcCwgYm9vbCBp c3JlZG8pOworCiBleHRlcm4gdm9pZCBBdEVPWGFjdF9TTWdyKHZvaWQpOwogZXh0ZXJuIGJvb2wg UHJvY2Vzc0JhcnJpZXJTbWdyUmVsZWFzZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvc3BjY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NwY2NhY2hlLmgKaW5kZXgg YzZjNzU0YTJlYy4uNjU2OTQ1MmU5MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvc3Bj Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zcGNjYWNoZS5oCkBAIC0xMiwxMCArMTIs MTIgQEAKICAqLwogI2lmbmRlZiBTUENDQUNIRV9ICiAjZGVmaW5lIFNQQ0NBQ0hFX0gKKyNpbmNs dWRlICJzdG9yYWdlL3NtZ3IuaCIKIAogZXh0ZXJuIHZvaWQgZ2V0X3RhYmxlc3BhY2VfcGFnZV9j b3N0cyhPaWQgc3BjaWQsIGZsb2F0OCAqc3BjX3JhbmRvbV9wYWdlX2Nvc3QsCiAJCQkJCQkJCQkg IGZsb2F0OCAqc3BjX3NlcV9wYWdlX2Nvc3QpOwogZXh0ZXJuIGludAlnZXRfdGFibGVzcGFjZV9p b19jb25jdXJyZW5jeShPaWQgc3BjaWQpOwogZXh0ZXJuIGludAlnZXRfdGFibGVzcGFjZV9tYWlu dGVuYW5jZV9pb19jb25jdXJyZW5jeShPaWQgc3BjaWQpOworZXh0ZXJuIFNNZ3JJZCBnZXRfdGFi bGVzcGFjZV9zbWdyaWQoT2lkIHNwY2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFNQQ0NBQ0hFX0gg Ki8KLS0gCjIuMzkuMAoK --000000000000cc837e05ff57eee8--