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 1uzIJH-001sMG-Ru for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 17:20:44 +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 1uzIJF-000tD4-EM for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 17:20:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uzIJE-000tCM-W1 for pgsql-hackers@lists.postgresql.org; Thu, 18 Sep 2025 17:20:41 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uzIJA-001Xs4-2J for pgsql-hackers@postgresql.org; Thu, 18 Sep 2025 17:20:40 +0000 Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-6228de280a4so1966820a12.2 for ; Thu, 18 Sep 2025 10:20:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758216037; x=1758820837; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=GwrJY2JL67oS3AM1RmZOfMRQyw80TT/+syMjyyN4S1M=; b=UWvXTxsSP58zNr6fC+OUpRgcF9/Kval9CpLFjY4ZvuOlQHtS9rRKTwS+4VkYohRQ5U tH4F9+smDh/HXmfuT5mreZWbRHZMzjOzSPKu/ojwOuRAVSy6nrKNS14Ep9rhpVoSvB9o xWep+lEWhdMwaV/bDPkrSOsmLpI9Ty1StzsHbEpdYq8b5eDj72Is/6vYOyRHV5yIm+VX fc8It4gatOi9nkYj49HrwHTotIYAfkpGaUCI4+xYw3pMCfZ9KvefHWcCNDSB/Od7AjG4 YCeO3iF4RwItc69kLYc9RBo2IVn7mnkLaLAWUfWh+RhBUOEw+659pglqcSRH/pGrfFoE tOkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758216037; x=1758820837; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=GwrJY2JL67oS3AM1RmZOfMRQyw80TT/+syMjyyN4S1M=; b=heiupr8sqCdpf4rTtB5xqhXStBsPckyLM1VW3DkFbXntFkH2nl6E1GShDkhRxXteti e1xbGHaxWbdHE0/0zudumF6yDnU4Vx56+QOcLIkOY1E9/7KVHR1F0ZBiCgRh6NKSIPBx cBFl9U+kvnNrZcW4l/7jj6GtjatbQks18gl+GbAYz0qJEkWT0UHVZf+IBDx08NuSSQH2 kozAysSgM6MzhEqn12Gcrj8v/EpyOdrr8o+V5kc1n1H4ip4Xb+7GYUrvt0VpAxHc265g NN2JAOeBLPLU8uDFQLmR4a14O4LT/0RpzRSAQwNhpKqd8qETn+ySbeDPVbP5GTItfjKx 3cuQ== X-Forwarded-Encrypted: i=1; AJvYcCUCAjtfcFzkhAq6SAM/6zzbyc7ECZkCz8cSN08FvdUvNYozXi9HUdTntSORBc9IN1BzxkbyWJ1waC5n5cmg@postgresql.org X-Gm-Message-State: AOJu0YxAQDsl5/Qkfpi24z7i4I09NTwh2pXTeJbupeN8GqfWq06J/GQ7 zdIQb+AsblmrlE1ofibo64cGPxgLIxdXeBruDtSAPwPR+1CricxfBD1XvzzljW0rLoeOmqVWf7c Gq1rPE4oc7MAIqkea5CvXsQMBWYNsDJM= X-Gm-Gg: ASbGncskeg+gbl+h9X/Jum8HTWhDfHTcAaqfumE+QDCqle7YuXAV4LFJDHy0tPy2UKf 93LmGJrq93KEHjnkAJRAQJSLja46l+nzdmdCPgB5Khcf15/kEs899yfNe/HFjLMPj5xhfE3ogwT B6gjMQ3raNBFZEXN7rbGp1oC8TgYFmWYaRudZ+rqtm4HirsoK+vi+fjHsGLSc/jRnO5gjpc39zs y94Z5I9FPkUn1SUTDqrzfw= X-Google-Smtp-Source: AGHT+IFvLBQelWZ/TFm3uUz1FpWngvjaF0m7tB5azQCGpOiXLPzLkxMaD/M8rH9S+xTtmVNPWVVL4hOggf+RSz2sabI= X-Received: by 2002:a05:6402:13d0:b0:62f:37ae:bc88 with SMTP id 4fb4d7f45d1cf-62fc091063fmr84649a12.16.1758216036856; Thu, 18 Sep 2025 10:20:36 -0700 (PDT) MIME-Version: 1.0 From: John H Date: Thu, 18 Sep 2025 10:20:22 -0700 X-Gm-Features: AS18NWDhZmX4-pPtEiAFbaUV2FN0xFHJlxHpf7gNW42Rsj-2hMFjA0lBT8jOAIA Message-ID: Subject: Introduce XID age based replication slot invalidation To: Bharath Rupireddy , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000050eea4063f169210" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000050eea4063f169210 Content-Type: text/plain; charset="UTF-8" Hi folks, I'd like to restart the discussion about providing an xid-based slot invalidation mechanism. The previous effort [1] presented an XID and time-based invalidation and the inactive time-based approach was implemented first. The latest XID based patch from Bharath Rupireddy can be found here [2]. When thinking about availability of the database, inactive replication slots cause two main pain points: 1) WAL accumulation 2) Replication slots with xmin/catalog_xmin can hold back vacuuming leading to wrap-around The first issue can be mitigated by 'max_slot_wal_keep_size'. However in the second case there are no good mechanisms to prioritize write availability of the database and avoid wraparound. The new GUC 'idle_replication_slot_timeout' partially addresses the concern if you have similar workloads. However it's hard to set the same setting across a fleet of different applications. It's easy to imagine a high-XID churning workload in one cluster while another has large batch jobs where changes get synced out periodically. There isn't a "one-size" fits all setting for 'idle_replication_slot_timeout' in these two cases. The attached patch addresses this by introducing 'max_slot_xid_age' in a similar fashion. Replication slots with transaction ID greater than the set age will get invalidated allowing vacuum to proceed, biasing towards database availability. Invalidation happens in CHECKPOINT, similar to 'idle_replication_slot_timeout', and when VACUUM occurs. The patch currently attempts to invalidate once-per-autovacuum worker. We're wondering if it should attempt invalidation on a per-relation basis within the vacuum call itself. That would account for scenarios where the cost_delay or naptime is high between autovac executions. Thanks, John H [1] https://www.postgresql.org/message-id/flat/CALj2ACW4aUe-_uFQOjdWCEN-xXoLGhmvRFnL8SNw_TZ5nJe%2Baw%40mail.gmail.com [2] https://www.postgresql.org/message-id/flat/CALj2ACXe8%2BxSNdMXTMaSRWUwX7v61Ad4iddUwnn%3DdjSwx3GLLg%40mail.gmail.com -- John Hsu - Amazon Web Services --00000000000050eea4063f169210 Content-Type: application/octet-stream; name="0044-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="0044-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfpoaq8r0 RnJvbSBjZDljYjEwNDA0MTgwMDgxMGQzOGUyMWUzMWQyMDczMTFmMTEyMjI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIEhzdSA8am9obmh5dnJAZ21haWwuY29tPgpEYXRlOiBG cmksIDggQXVnIDIwMjUgMTk6NDg6NTggKzAwMDAKU3ViamVjdDogW1BBVENIXSBBZGQgWElEIGFn ZSBiYXNlZCByZXBsaWNhdGlvbiBzbG90IGludmFsaWRhdGlvbgoKVGhpcyBjb21taXQgaW50cm9k dWNlcyBtYXhfc2xvdF94aWRfYWdlIEdVQwp0aGF0IGFsbG93cyByZXBsaWNhdGlvbiBzbG90cyB3 aG9zZSB4bWluIG9yCmNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCB0aGUgYWdlIHNwZWNpZmllZCBi eQp0aGlzIHNldHRpbmcgdG8gYmUgaW52YWxpZGF0ZWQuCgpJZGxlIG9yIGZvcmdvdHRlbiByZXBs aWNhdGlvbiBzbG90cyBjYW4gaG9sZApiYWNrIHZhY3V1bSBvcGVyYXRpb25zIGxlYWRpbmcgdG8g YmxvYXQgb3IKdHJhbnNhY3Rpb24gWElEIHdyYXAgYXJvdW5kLCByZXF1aXJpbmcgdGhlIHNsb3QK dG8gYmUgZHJvcHBlZCBhbmQgcmVxdWlyaW5nIHNpbmdsZSB1c2VyLW1vZGUKdmFjdXVtaW5nLiBU aGlzIHNldHRpbmcgYXZvaWRzIHRoZXNlIHNjZW5hcmlvcwpieSBwcm9hY3RpdmVseSBpbnZhbGlk YXRpbmcgdGhlc2Ugc3RhbGUgc2xvdHMKb24gYW4gWElEIGJhc2lzLgoKSW52YWxpZGF0aW9uIGNo ZWNrcyBoYXBwZW5zIGF0IHZhcmlvdXMgbG9jYXRpb25zCnRvIHByZXZlbnQgd3JhcC1hcm91bmQ6 Ci0gRHVyaW5nIENIRUNLUE9JTlQKLSBEdXJpbmcgdmFjdXVtIChpbmNsdWRpbmcgYXV0b3ZhY3V1 bSkKClRoaXMgY2hhbmdlIG1ha2VzIGl0IGVhc3kgZm9yIGFkbWluaXN0cmF0b3JzIHRvCnByb3Rl Y3QgYWdhaW5zdCB3cmFwLWFyb3VuZCBjb25jZXJucyBkdWUgdG8gc2xvdHMKdGhhdCBhcmUgZmFs bGluZyBiZWhpbmQuCgpBdXRob3I6IEJoYXJhdGggUnVwaXJlZGR5CkF1dGhvcjogSm9obiBIc3UK LS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMjYg KysKIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgICAgICB8ICA3MCArKysr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jICAgICAgICAgICAgICAgIHwgIDgwICsr KysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4 ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAgNyAr LQogLi4uL3QvMDQ5X2ludmFsaWRhdGVfeGlkX2FnZWRfc2xvdHMucGwgICAgICAgIHwgMjQwICsr KysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MzYgaW5zZXJ0aW9ucygrKSwgNyBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWNvdmVyeS90LzA0OV9p bnZhbGlkYXRlX3hpZF9hZ2VkX3Nsb3RzLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGU5YjQyMGYzZGRiLi5l YjA3YmNkMzU1MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDY1Myw2ICs0NjUzLDMyIEBAIHJlc3RvcmVfY29t bWFuZCA9ICdjb3B5ICJDOlxcc2VydmVyXFxhcmNoaXZlZGlyXFwlZiIgIiVwIicgICMgV2luZG93 cwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLW1heC1zbG90LXhpZC1hZ2UiIHhyZWZsYWJlbD0ibWF4X3Nsb3RfeGlk X2FnZSI+CisgICAgICA8dGVybT48dmFybmFtZT5tYXhfc2xvdF94aWRfYWdlPC92YXJuYW1lPiAo PHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEludmFsaWRhdGUgcmVwbGljYXRpb24g c2xvdHMgd2hvc2UgPGxpdGVyYWw+eG1pbjwvbGl0ZXJhbD4gKHRoZSBvbGRlc3QKKyAgICAgICAg dHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNsb3QgbmVlZHMgdGhlIGRhdGFiYXNlIHRvIHJldGFpbikg b3IKKyAgICAgICAgPGxpdGVyYWw+Y2F0YWxvZ194bWluPC9saXRlcmFsPiAodGhlIG9sZGVzdCB0 cmFuc2FjdGlvbiBhZmZlY3RpbmcgdGhlCisgICAgICAgIHN5c3RlbSBjYXRhbG9ncyB0aGF0IHRo aXMgc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluKSBoYXMgcmVhY2hlZAorICAgICAg ICB0aGUgYWdlIHNwZWNpZmllZCBieSB0aGlzIHNldHRpbmcuIEEgdmFsdWUgb2YgemVybyAod2hp Y2ggaXMgZGVmYXVsdCkKKyAgICAgICAgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBVc2VycyBjYW4g c2V0IHRoaXMgdmFsdWUgYW55d2hlcmUgZnJvbSB6ZXJvIHRvCisgICAgICAgIHR3byBiaWxsaW9u LiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFt ZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFu ZAorICAgICAgICBsaW5lLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxwYXJhPgorICAgICAg ICBUaGlzIGludmFsaWRhdGlvbiBjaGVjayBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZSBzbG90IGlz IGFjcXVpcmVkCisgICAgICAgIGZvciB1c2Ugb3IgZHVyaW5nIHZhY3V1bSBvciBkdXJpbmcgY2hl Y2twb2ludC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtd2FsLXNlbmRlci10aW1lb3V0 IiB4cmVmbGFiZWw9IndhbF9zZW5kZXJfdGltZW91dCI+CiAgICAgICA8dGVybT48dmFybmFtZT53 YWxfc2VuZGVyX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAg IDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggNDE4NzE5MWVhNzQuLmJlZWIy MmE3ZGE0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCkBAIC0zMDA3LDYgKzMwMDcsMTQgQEAgU0VM RUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFjdHMgcHB4CiAg ICAgICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLWlkbGUtcmVwbGljYXRpb24tc2xvdC10aW1lb3V0 Ii8+IGR1cmF0aW9uLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD54aWRf YWdlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgc2xvdCdzCisgICAgICAgICAgPGxpdGVyYWw+ eG1pbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+Y2F0YWxvZ194bWluPC9saXRlcmFsPgorICAgICAg ICAgIGhhcyByZWFjaGVkIHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5CisgICAgICAgICAgPHhyZWYgbGlu a2VuZD0iZ3VjLW1heC1zbG90LXhpZC1hZ2UiLz4gcGFyYW1ldGVyLgorICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4 IDBiYWYwYWM2MTYwLi40MWE0ODM4OWFmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpA QCAtNzM0Nyw3ICs3MzQ3LDcgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJ WExCeXRlVG9TZWcoUmVkb1JlY1B0ciwgX2xvZ1NlZ05vLCB3YWxfc2VnbWVudF9zaXplKTsKIAlL ZWVwTG9nU2VnKHJlY3B0ciwgJl9sb2dTZWdObyk7Ci0JaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJl cGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVP VVQsCisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FM X1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQgfCBSU19JTlZBTF9YSURfQUdFLAogCQkJ CQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKIAkJCQkJCQkJCQkgICBJbnZhbGlkVHJh bnNhY3Rpb25JZCkpCiAJewpAQCAtNzgwMSw3ICs3ODAxLDcgQEAgQ3JlYXRlUmVzdGFydFBvaW50 KGludCBmbGFncykKIAlyZXBsYXlQdHIgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKCZyZXBsYXlUTEkp OwogCWVuZHB0ciA9IChyZWNlaXZlUHRyIDwgcmVwbGF5UHRyKSA/IHJlcGxheVB0ciA6IHJlY2Vp dmVQdHI7CiAJS2VlcExvZ1NlZyhlbmRwdHIsICZfbG9nU2VnTm8pOwotCWlmIChJbnZhbGlkYXRl T2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxf SURMRV9USU1FT1VULAorCWlmIChJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJT X0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxfSURMRV9USU1FT1VUIHwgUlNfSU5WQUxfWElE X0FHRSwKIAkJCQkJCQkJCQkgICBfbG9nU2VnTm8sIEludmFsaWRPaWQsCiAJCQkJCQkJCQkJICAg SW52YWxpZFRyYW5zYWN0aW9uSWQpKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggNzMzZWY0 MGFlN2MuLjkxY2MwODA2OWM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1 dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtNDcsNiArNDcsNyBA QAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZt Z3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Btc2ln bmFsLmgiCkBAIC0xMjksNiArMTMwLDcgQEAgc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVs aWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zIHBhcmFtcywKIHN0YXRpYyBkb3Vi bGUgY29tcHV0ZV9wYXJhbGxlbF9kZWxheSh2b2lkKTsKIHN0YXRpYyBWYWNPcHRWYWx1ZSBnZXRf dmFjb3B0dmFsX2Zyb21fYm9vbGVhbihEZWZFbGVtICpkZWYpOwogc3RhdGljIGJvb2wgdmFjX3Rp ZF9yZWFwZWQoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOworc3RhdGljIHZvaWQg dHJ5X3JlcGxpY2F0aW9uX3Nsb3RfaW52YWxpZGF0aW9uKHZvaWQpOwogCiAvKgogICogR1VDIGNo ZWNrIGZ1bmN0aW9uIHRvIGVuc3VyZSBHVUMgdmFsdWUgc3BlY2lmaWVkIGlzIHdpdGhpbiB0aGUg YWxsb3dhYmxlCkBAIC00NzEsNiArNDczLDU2IEBAIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0 YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJTWVtb3J5Q29udGV4 dERlbGV0ZSh2YWNfY29udGV4dCk7CiB9CiAKKy8qCisgKiBUcnkgaW52YWxpZGF0aW5nIHJlcGxp Y2F0aW9uIHNsb3RzIGJhc2VkIG9uIGN1cnJlbnQgcmVwbGljYXRpb24gc2xvdCB4bWluCisgKiBs aW1pdHMgb25jZSBldmVyeSB2YWN1dW0gY3ljbGUuCisgKi8KK3N0YXRpYyB2b2lkCit0cnlfcmVw bGljYXRpb25fc2xvdF9pbnZhbGlkYXRpb24odm9pZCkKK3sKKworCVRyYW5zYWN0aW9uSWQgbWlu X3Nsb3RfeG1pbjsKKwlUcmFuc2FjdGlvbklkIG1pbl9zbG90X2NhdGFsb2dfeG1pbjsKKwlib29s CQljYW5faW52YWxpZGF0ZSA9IGZhbHNlOworCVRyYW5zYWN0aW9uSWQgY3V0b2ZmOworCVRyYW5z YWN0aW9uSWQgY3VycjsKKworCWlmIChtYXhfc2xvdF94aWRfYWdlID09IDApCisJCXJldHVybjsK KworCWN1cnIgPSBSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKTsKKworCS8qCisJICogQ2FsY3VsYXRl IG9sZGVzdCBYSUQgYSBzbG90J3MgeG1pbiBvciBjYXRhbG9nX3htaW4gY2FuIGhhdmUgYmVmb3Jl CisJICogdGhleSBhcmUgaW52YWxpZGF0ZWQuCisJICovCisJY3V0b2ZmID0gY3VyciAtIG1heF9z bG90X3hpZF9hZ2U7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbChjdXRvZmYpKQorCQlj dXRvZmYgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CisKKwlQcm9jQXJyYXlHZXRSZXBsaWNh dGlvblNsb3RYbWluKCZtaW5fc2xvdF94bWluLCAmbWluX3Nsb3RfY2F0YWxvZ194bWluKTsKKwor CWlmIChUcmFuc2FjdGlvbklkSXNOb3JtYWwobWluX3Nsb3RfeG1pbikgJiYKKwkJVHJhbnNhY3Rp b25JZFByZWNlZGVzT3JFcXVhbHMobWluX3Nsb3RfeG1pbiwgY3V0b2ZmKSkKKwkJY2FuX2ludmFs aWRhdGUgPSB0cnVlOworCWVsc2UgaWYgKFRyYW5zYWN0aW9uSWRJc05vcm1hbChtaW5fc2xvdF9j YXRhbG9nX3htaW4pICYmCisJCQkgVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMobWluX3Ns b3RfY2F0YWxvZ194bWluLCBjdXRvZmYpKQorCQljYW5faW52YWxpZGF0ZSA9IHRydWU7CisKKwlp ZiAoY2FuX2ludmFsaWRhdGUpCisJeworCQkvKgorCQkgKiBOb3RlIHRoYXQgSW52YWxpZGF0ZU9i c29sZXRlUmVwbGljYXRpb25TbG90cyBpcyBhbHNvIGNhbGxlZCBhcyBwYXJ0CisJCSAqIG9mIENI RUNLUE9JTlQsIGFuZCBlbWl0dGluZyBFUlJPUnMgZnJvbSB3aXRoaW4gaXMgYXZvaWRlZCBhbHJl YWR5LgorCQkgKiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIGNvbmNlcm4gaGVyZSB0aGF0IGFueSBF UlJPUiBmcm9tCisJCSAqIGludmFsaWRhdGluZyByZXBsaWNhdGlvbiBzbG90cyBibG9ja3MgVkFD VVVNLgorCQkgKi8KKwkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZB TF9YSURfQUdFLCAwLAorCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsIEludmFsaWRUcmFuc2FjdGlv bklkKTsKKwl9Cit9CisKIC8qCiAgKiBJbnRlcm5hbCBlbnRyeSBwb2ludCBmb3IgYXV0b3ZhY3V1 bSBhbmQgdGhlIFZBQ1VVTSAvIEFOQUxZWkUgY29tbWFuZHMuCiAgKgpAQCAtNDk4LDcgKzU1MCw3 IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVnCiAJICAgTWVtb3J5Q29udGV4dCB2YWNfY29udGV4 dCwgYm9vbCBpc1RvcExldmVsKQogewogCXN0YXRpYyBib29sIGluX3ZhY3V1bSA9IGZhbHNlOwot CisJc3RhdGljIGJvb2wgZmlyc3RfdGltZSA9IHRydWU7CiAJY29uc3QgY2hhciAqc3RtdHR5cGU7 CiAJdm9sYXRpbGUgYm9vbCBpbl9vdXRlcl94YWN0LAogCQkJCXVzZV9vd25feGFjdHM7CkBAIC02 MTEsNiArNjYzLDIyIEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIGNvbnN0IFZhY3V1bVBhcmFt cyBwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVnCiAJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCX0KIAorCWlmIChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0p CisJeworCQlpZiAoZmlyc3RfdGltZSkKKwkJCXRyeV9yZXBsaWNhdGlvbl9zbG90X2ludmFsaWRh dGlvbigpOworCisJCS8qCisJCSAqIEV2ZXJ5IGF1dG92YWN1dW0gd29ya2VyIHdpbGwgYXR0ZW1w dCB0byBpbnZhbGlkYXRlIHJlcGxpY2F0aW9uIHNsb3RzIG9uY2UuCisJCSAqIElmIGEgcmVwbGlj YXRpb24gc2xvdCBleGNlZWRzIHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5IG1heF9zbG90X3hpZF9hZ2Ug dGhlbgorCQkgKiBpdCB3aWxsIG9ubHkgYmUgaW52YWxpZGF0ZWQgb25jZSB0aGUgbmV4dCB3b3Jr ZXIgYXR0ZW1wdCBraWNrcyBvZmYuIEZvcgorCQkgKiBtYW51YWwgVkFDVVVNIGFsd2F5cyBhdHRl bXB0IGludmFsaWRhdGlvbiB0byBhY2NvdW50IGZvciBsb25nLWxpdmVkCisJCSAqIG1haW50ZW5h bmNlIGNvbm5lY3Rpb25zLgorCQkgKi8KKwkJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3Mo KSkKKwkJCWZpcnN0X3RpbWUgPSBmYWxzZTsKKwl9CisKIAkvKiBUdXJuIHZhY3V1bSBjb3N0IGFj Y291bnRpbmcgb24gb3Igb2ZmLCBhbmQgc2V0L2NsZWFyIGluX3ZhY3V1bSAqLwogCVBHX1RSWSgp OwogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCBmZDBmZGI5NmQ0Mi4uYjRmYzBiYTM3MDIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTExNiw2ICsxMTYsNyBAQCBzdGF0aWMgY29uc3Qg U2xvdEludmFsaWRhdGlvbkNhdXNlTWFwIFNsb3RJbnZhbGlkYXRpb25DYXVzZXNbXSA9IHsKIAl7 UlNfSU5WQUxfSE9SSVpPTiwgInJvd3NfcmVtb3ZlZCJ9LAogCXtSU19JTlZBTF9XQUxfTEVWRUws ICJ3YWxfbGV2ZWxfaW5zdWZmaWNpZW50In0sCiAJe1JTX0lOVkFMX0lETEVfVElNRU9VVCwgImlk bGVfdGltZW91dCJ9LAorCXtSU19JTlZBTF9YSURfQUdFLCAieGlkX2FnZWQifSwKIH07CiAKIC8q CkBAIC0xNTcsNiArMTU4LDEyIEBAIGludAkJCW1heF9yZXBsaWNhdGlvbl9zbG90cyA9IDEwOyAv KiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVwbGljYXRpb24KICAqLwogaW50CQkJaWRsZV9yZXBs aWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjcyA9IDA7CiAKKy8qCisgKiBJbnZhbGlkYXRlIHJlcGxp Y2F0aW9uIHNsb3RzIHRoYXQgaGF2ZSB4bWluIG9yIGNhdGFsb2dfeG1pbiBncmVhdGVyCisgKiB0 aGFuIHRoZSBzcGVjaWZpZWQgYWdlOyAnMCcgZGlzYWJsZXMgaXQuCisgKi8KK2ludAkJCW1heF9z bG90X3hpZF9hZ2UgPSAwOworCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3RyZWFtaW5nIHJlcGxp Y2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdAogICogbG9naWNhbCBXQUwgc2Vu ZGVyIHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLgpAQCAtMTYyMCw3ICsxNjI3LDkgQEAgUmVwb3J0 U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwK IAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRl c3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0J CQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMpCisJCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3Nl Y29uZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeG1pbiwKKwkJCQkJICAgVHJhbnNhY3Rpb25J ZCBjYXRhbG9nX3htaW4pCiB7CiAJU3RyaW5nSW5mb0RhdGEgZXJyX2RldGFpbDsKIAlTdHJpbmdJ bmZvRGF0YSBlcnJfaGludDsKQEAgLTE2NjUsNiArMTY3NCwyNiBAQCBSZXBvcnRTbG90SW52YWxp ZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQkJCQkg ImlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CisKKwkJ Y2FzZSBSU19JTlZBTF9YSURfQUdFOgorCQkJeworCQkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNW YWxpZCh4bWluKSB8fCBUcmFuc2FjdGlvbklkSXNWYWxpZChjYXRhbG9nX3htaW4pKTsKKworCQkJ CWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygm ZXJyX2RldGFpbCwgXygiVGhlIHNsb3QncyB4bWluICV1IGV4Y2VlZHMgdGhlIG1heGltdW0geGlk IGFnZSAlZCBzcGVjaWZpZWQgYnkgXCJtYXhfc2xvdF94aWRfYWdlXCIuIiksCisJCQkJCQkJCSB4 bWluLAorCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSk7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZlcnJfZGV0YWlsLCBfKCJUaGUgc2xvdCdzIGNhdGFsb2dfeG1pbiAldSBleGNl ZWRzIHRoZSBtYXhpbXVtIHhpZCBhZ2UgJWQgc3BlY2lmaWVkIGJ5IFwibWF4X3Nsb3RfeGlkX2Fn ZVwiLiIpLAorCQkJCQkJCQkgY2F0YWxvZ194bWluLAorCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2Fn ZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJfaGludCwgXygiWW91IG1pZ2h0IG5lZWQg dG8gaW5jcmVhc2UgXCIlc1wiLiIpLAorCQkJCQkJCQkgIm1heF9zbG90X3hpZF9hZ2UiKTsKKwor CisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUlNfSU5WQUxfTk9ORToKIAkJCXBnX3VucmVhY2hh YmxlKCk7CiAJfQpAQCAtMTc4Myw2ICsxODEyLDEzIEBAIERldGVybWluZVNsb3RJbnZhbGlkYXRp b25DYXVzZSh1aW50MzIgcG9zc2libGVfY2F1c2VzLCBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCX0K IAl9CiAKKwlpZiAocG9zc2libGVfY2F1c2VzICYgUlNfSU5WQUxfWElEX0FHRSkKKwl7CisJCS8q IFNhZmUgc2luY2Ugd2UgaG9sZCB0aGUgcmVwbGljYXRpb24gc2xvdCdzIHNwaW5sb2NrIG5lZWRl ZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgKi8KKwkJaWYgKFJlcGxpY2F0aW9uU2xvdElzWElE QWdlZChzLT5kYXRhLnhtaW4sIHMtPmRhdGEuY2F0YWxvZ194bWluKSkKKwkJCXJldHVybiBSU19J TlZBTF9YSURfQUdFOworCX0KKwogCXJldHVybiBSU19JTlZBTF9OT05FOwogfQogCkBAIC0xOTcy LDcgKzIwMDgsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3Np YmxlX2NhdXNlcywKIAkJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVz ZSwgdHJ1ZSwgYWN0aXZlX3BpZCwKIAkJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwK IAkJCQkJCQkJCSAgIG9sZGVzdExTTiwgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJCQkJ CQkgICBzbG90X2lkbGVfc2Vjcyk7CisJCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0 YS54bWluLCBzLT5kYXRhLmNhdGFsb2dfeG1pbik7CiAKIAkJCQlpZiAoTXlCYWNrZW5kVHlwZSA9 PSBCX1NUQVJUVVApCiAJCQkJCSh2b2lkKSBTZW5kUHJvY1NpZ25hbChhY3RpdmVfcGlkLApAQCAt MjAxOSw3ICsyMDU1LDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBw b3NzaWJsZV9jYXVzZXMsCiAJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9j YXVzZSwgZmFsc2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xz biwKIAkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJ CQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0 YS54bWluLCBzLT5kYXRhLmNhdGFsb2dfeG1pbik7CiAKIAkJCS8qIGRvbmUgd2l0aCB0aGlzIHNs b3QgZm9yIG5vdyAqLwogCQkJYnJlYWs7CkBAIC0yMDQ0LDYgKzIwODAsOCBAQCBJbnZhbGlkYXRl UG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKICAqIC0gUlNfSU5W QUxfV0FMX0xFVkVMOiBpcyBsb2dpY2FsIGFuZCB3YWxfbGV2ZWwgaXMgaW5zdWZmaWNpZW50CiAg KiAtIFJTX0lOVkFMX0lETEVfVElNRU9VVDogaGFzIGJlZW4gaWRsZSBsb25nZXIgdGhhbiB0aGUg Y29uZmlndXJlZAogICogICAiaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQiIGR1cmF0aW9u LgorICogLSBSU19JTlZBTF9YSURfQUdFOiBzbG90IHhpZCBhZ2UgaXMgb2xkZXIgdGhhbiB0aGUg Y29uZmlndXJlZAorICogICAibWF4X3Nsb3RfeGlkX2FnZSIgYWdlCiAgKgogICogTm90ZTogVGhp cyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnZhbGlkYXRlIHRoZSBzbG90IGZvciBtdWx0aXBsZSBw b3NzaWJsZQogICogY2F1c2VzIGluIGEgc2luZ2xlIHBhc3MsIG1pbmltaXppbmcgcmVkdW5kYW50 IGl0ZXJhdGlvbnMuIFRoZSAiY2F1c2UiCkBAIC0zMDkzLDMgKzMxMzEsMzkgQEAgV2FpdEZvclN0 YW5kYnlDb25maXJtYXRpb24oWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24pCiAKIAlDb25kaXRpb25W YXJpYWJsZUNhbmNlbFNsZWVwKCk7CiB9CisKKy8qCisgKiBDaGVjayB0cnVlIGlmIHRoZSBnaXZl biBwYXNzZWQgaW4geG1pbiBvciBjYXRhbG9nX3htaW4gYWdlIGlzCisgKiBvbGRlciB0aGFuIHRo ZSBhZ2Ugc3BlY2lmaWVkIGJ5IG1heF9zbG90X3hpZF9hZ2UuCisgKi8KK2Jvb2wKK1JlcGxpY2F0 aW9uU2xvdElzWElEQWdlZChUcmFuc2FjdGlvbklkIHhtaW4sIFRyYW5zYWN0aW9uSWQgY2F0YWxv Z194bWluKQoreworCVRyYW5zYWN0aW9uSWQgY3V0b2ZmOworCVRyYW5zYWN0aW9uSWQgY3VycjsK Kwlib29sIGlzX2FnZWQgPSBmYWxzZTsKKworCWlmIChtYXhfc2xvdF94aWRfYWdlID09IDApCisJ CXJldHVybiBmYWxzZTsKKworCWN1cnIgPSBSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKTsKKworCS8q CisJICogQ2FsY3VsYXRlIG9sZGVzdCBYSUQgYSBzbG90J3MgeG1pbiBvciBjYXRhbG9nX3htaW4g Y2FuIGhhdmUgYmVmb3JlCisJICogdGhleSBhcmUgaW52YWxpZGF0ZWQuCisJICovCisJY3V0b2Zm ID0gY3VyciAtIG1heF9zbG90X3hpZF9hZ2U7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1h bChjdXRvZmYpKQorCQljdXRvZmYgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CisKKwlpZiAo VHJhbnNhY3Rpb25JZElzTm9ybWFsKHhtaW4pICYmCisJCVRyYW5zYWN0aW9uSWRQcmVjZWRlc09y RXF1YWxzKHhtaW4sIGN1dG9mZikpCisJCWlzX2FnZWQgPSB0cnVlOworCisJaWYgKFRyYW5zYWN0 aW9uSWRJc05vcm1hbChjYXRhbG9nX3htaW4pICYmCisJCVRyYW5zYWN0aW9uSWRQcmVjZWRlc09y RXF1YWxzKGNhdGFsb2dfeG1pbiwgY3V0b2ZmKSkKKwkJaXNfYWdlZCA9IHRydWU7CisKKwlyZXR1 cm4gaXNfYWdlZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQK aW5kZXggNmJjNmJlMTNkMmEuLmMxNjIyNjhjMzE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMTcxNyw2ICsxNzE3LDE0IEBACiAgIG1heCA9PiAnSU5U X01BWCcsCiB9LAogCit7IG5hbWUgPT4gJ21heF9zbG90X3hpZF9hZ2UnLCB0eXBlID0+ICdpbnQn LCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FUSU9OX1NFTkRJTkcn LAorICBzaG9ydF9kZXNjID0+ICdBZ2Ugb2YgdGhlIHRyYW5zYWN0aW9uIElEIGF0IHdoaWNoIGEg cmVwbGljYXRpb24gc2xvdCBnZXRzIGludmFsaWRhdGVkLicsCisgIHZhcmlhYmxlID0+ICdtYXhf c2xvdF94aWRfYWdlJywKKyAgYm9vdF92YWwgPT4gJzAnLAorICBtaW4gPT4gJzAnLAorICBtYXgg PT4gJzIwMDAwMDAwMDAnLAorfSwKKwogIyB3ZSBoYXZlIG5vIG1pY3Jvc2Vjb25kcyBkZXNpZ25h dGlvbiwgc28gY2FuJ3Qgc3VwcGx5IHVuaXRzIGhlcmUKIHsgbmFtZSA9PiAnY29tbWl0X2RlbGF5 JywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NVU0VUJywgZ3JvdXAgPT4gJ1dBTF9T RVRUSU5HUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldHMgdGhlIGRlbGF5IGluIG1pY3Jvc2Vjb25k cyBiZXR3ZWVuIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgZmx1c2hpbmcgV0FMIHRvIGRpc2suJywK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Nsb3QuaAppbmRleCBmZTYyMTYyY2RlMy4uMzI1M2YxMDhmZmMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9zbG90LmgKQEAgLTY2LDEwICs2NiwxMiBAQCB0eXBlZGVmIGVudW0gUmVwbGlj YXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UKIAlSU19JTlZBTF9XQUxfTEVWRUwgPSAoMSA8PCAy KSwKIAkvKiBpZGxlIHNsb3QgdGltZW91dCBoYXMgb2NjdXJyZWQgKi8KIAlSU19JTlZBTF9JRExF X1RJTUVPVVQgPSAoMSA8PCAzKSwKKwkvKiBzbG90J3MgeG1pbiBvciBjYXRhbG9nX3htaW4gaGFz IHJlYWNoZWQgbWF4IHhpZCBhZ2UgKi8KKwlSU19JTlZBTF9YSURfQUdFID0gKDEgPDwgNCksCiB9 IFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlOwogCiAvKiBNYXhpbXVtIG51bWJlciBv ZiBpbnZhbGlkYXRpb24gY2F1c2VzICovCi0jZGVmaW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNAor I2RlZmluZQlSU19JTlZBTF9NQVhfQ0FVU0VTIDUKIAogLyoKICAqIE9uLURpc2sgZGF0YSBvZiBh IHJlcGxpY2F0aW9uIHNsb3QsIHByZXNlcnZlZCBhY3Jvc3MgcmVzdGFydHMuCkBAIC0yOTMsNiAr Mjk1LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFJlcGxpY2F0aW9uU2xvdCAqTXlSZXBsaWNhdGlv blNsb3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9yZXBsaWNhdGlvbl9zbG90czsKIGV4 dGVybiBQR0RMTElNUE9SVCBjaGFyICpzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90czsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjczsKK2V4 dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Nsb3RfeGlkX2FnZTsKIAogLyogc2htZW0gaW5pdGlh bGl6YXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gU2l6ZSBSZXBsaWNhdGlvblNsb3RzU2htZW1T aXplKHZvaWQpOwpAQCAtMzUwLDQgKzM1Myw2IEBAIGV4dGVybiBib29sIFNsb3RFeGlzdHNJblN5 bmNTdGFuZGJ5U2xvdHMoY29uc3QgY2hhciAqc2xvdF9uYW1lKTsKIGV4dGVybiBib29sIFN0YW5k YnlTbG90c0hhdmVDYXVnaHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCk7 CiBleHRlcm4gdm9pZCBXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRf Zm9yX2xzbik7CiAKK2V4dGVybiBib29sIFJlcGxpY2F0aW9uU2xvdElzWElEQWdlZChUcmFuc2Fj dGlvbklkIHhtaW4sIFRyYW5zYWN0aW9uSWQgY2F0YWxvZ194bWluKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFNMT1RfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDlfaW52YWxp ZGF0ZV94aWRfYWdlZF9zbG90cy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQ5X2ludmFsaWRh dGVfeGlkX2FnZWRfc2xvdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmYxZThmMDAzZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w NDlfaW52YWxpZGF0ZV94aWRfYWdlZF9zbG90cy5wbApAQCAtMCwwICsxLDI0MCBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMg VGVzdCBmb3IgcmVwbGljYXRpb24gc2xvdHMgaW52YWxpZGF0aW9uIGR1ZSB0byBYSUQgYWdlCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6QmFja2dyb3VuZFBzcWw7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBUZXN0OjpNb3JlOworCisjIFdhaXQg Zm9yIHNsb3QgdG8gZmlyc3QgYmVjb21lIGluYWN0aXZlIGFuZCB0aGVuIGdldCBpbnZhbGlkYXRl ZAorc3ViIHdhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uCit7CisJbXkgKCRub2RlLCAkc2xvdF9u YW1lLCAkcmVhc29uKSA9IEBfOworCW15ICRuYW1lID0gJG5vZGUtPm5hbWU7CisKKwkjIFdhaXQg Zm9yIHRoZSBpbmFjdGl2ZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlIGludmFsaWRhdGVkCisJJG5v ZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQlTRUxFQ1QgQ09VTlQo c2xvdF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworCQkJV0hFUkUgc2xvdF9u YW1lID0gJyRzbG90X25hbWUnIEFORAorCQkJaW52YWxpZGF0aW9uX3JlYXNvbiA9ICckcmVhc29u JzsKKwldKQorCSAgb3IgZGllCisJICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGluYWN0 aXZlIHNsb3QgJHNsb3RfbmFtZSB0byBiZSBpbnZhbGlkYXRlZCBvbiBub2RlICRuYW1lIjsKK30K KworIyBEbyBzb21lIHdvcmsgZm9yIGFkdmFuY2luZyB4aWRzIG9uIGEgZ2l2ZW4gbm9kZQorc3Vi IGFkdmFuY2VfeGlkcworeworCW15ICgkbm9kZSwgJHRhYmxlX25hbWUpID0gQF87CisKKwkkbm9k ZS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJZG8gXCRcJAorCQliZWdpbgorCQlm b3IgaSBpbiAxMDAwMC4uMTEwMDAgbG9vcAorCQkJLS0gdXNlIGFuIGV4Y2VwdGlvbiBibG9jayBz byB0aGF0IGVhY2ggaXRlcmF0aW9uIGVhdHMgYW4gWElECisJCQliZWdpbgorCQkJaW5zZXJ0IGlu dG8gJHRhYmxlX25hbWUgdmFsdWVzIChpKTsKKwkJCWV4Y2VwdGlvbgorCQkJd2hlbiBkaXZpc2lv bl9ieV96ZXJvIHRoZW4gbnVsbDsKKwkJCWVuZDsKKwkJZW5kIGxvb3A7CisJCWVuZFwkXCQ7CisJ XSk7Cit9CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFs aWRhdGUgc3RyZWFtaW5nIHN0YW5kYnkncyBzbG90IGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlCisj IEdVQy4KKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkgJHByaW1hcnkgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRwcmltYXJ5LT5pbml0KGFsbG93 c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKworIyBDb25maWd1cmUgcHJpbWFyeSB3aXRoIFhJ RCBhZ2Ugc2V0dGluZ3MKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25m JywgcXF7CittYXhfc2xvdF94aWRfYWdlID0gNTAwCit9KTsKKworJHByaW1hcnktPnN0YXJ0Owor CisjIFRha2UgYSBiYWNrdXAgZm9yIGNyZWF0aW5nIHN0YW5kYnkKK215ICRiYWNrdXBfbmFtZSA9 ICdiYWNrdXAnOworJHByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBh IHN0YW5kYnkgbGlua2luZyB0byB0aGUgcHJpbWFyeSB1c2luZyB0aGUgcmVwbGljYXRpb24gc2xv dAorbXkgJHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnkn KTsKKyRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAkYmFja3VwX25hbWUsIGhh c19zdHJlYW1pbmcgPT4gMSk7CisKKyMgRW5hYmxlIGhzX2ZlZWRiYWNrLiBUaGUgc2xvdCBzaG91 bGQgZ2FpbiBhbiB4bWluLiBXZSBzZXQgdGhlIHN0YXR1cyBpbnRlcnZhbAorIyBzbyB3ZSdsbCBz ZWUgdGhlIHJlc3VsdHMgcHJvbXB0bHkuCiskc3RhbmRieS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3Rn cmVzcWwuY29uZicsIHF7CitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYl9zbG90JworaG90X3N0YW5k YnlfZmVlZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEKK21heF9z dGFuZGJ5X3N0cmVhbWluZ19kZWxheSA9IDM2MDAwMDAKK30pOworCiskcHJpbWFyeS0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVw bGljYXRpb25fc2xvdChzbG90X25hbWUgOj0gJ3NiX3Nsb3QnLCBpbW1lZGlhdGVseV9yZXNlcnZl IDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5LT5zdGFydDsKKworIyBDcmVhdGUgc29tZSBjb250 ZW50IG9uIHByaW1hcnkgdG8gbW92ZSB4bWluCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBUQUJMRSB0YWJfaW50IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgQVMgYSIpOworCisjIFdhaXQgdW50aWwgc3RhbmRieSBoYXMgcmVwbGF5ZWQgZW5vdWdoIGRh dGEKKyRwcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5KTsKKworJHByaW1hcnktPnBv bGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUICh4bWluIElTIE5PVCBO VUxMKSBPUiAoY2F0YWxvZ194bWluIElTIE5PVCBOVUxMKQorCQlGUk9NIHBnX2NhdGFsb2cucGdf cmVwbGljYXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3NiX3Nsb3QnOworXSkgb3Ig ZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCBzYl9zbG90IHhtaW4gdG8gYWR2YW5jZSI7 CisKKyMgU3RvcCBzdGFuZGJ5IHRvIG1ha2UgdGhlIHJlcGxpY2F0aW9uIHNsb3QncyB4bWluIG9u IHByaW1hcnkgdG8gYWdlCisKKyMgUmVhZCBvbiBzdGFuZGJ5IHRoYXQgY2F1c2VzIHhtaW4gdG8g YmUgaGVsZCBvbiBzbG90CitteSAkc3RhbmRieV9zZXNzaW9uID0gJHN0YW5kYnktPmludGVyYWN0 aXZlX3BzcWwoJ3Bvc3RncmVzJyk7Ciskc3RhbmRieV9zZXNzaW9uLT5xdWVyeSgiQkVHSU47IFNF VCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQnOyBTRUxF Q1QgKiBGUk9NIHRhYl9pbnQ7Iik7CisKKyMkc3RhbmRieS0+c3RvcDsKKworIyBEbyBzb21lIHdv cmsgdG8gYWR2YW5jZSB4aWRzIG9uIHByaW1hcnkKK2FkdmFuY2VfeGlkcygkcHJpbWFyeSwgJ3Rh Yl9pbnQnKTsKKworIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZWNvbWUgaW5h Y3RpdmUgYW5kIHRoZW4gaW52YWxpZGF0ZWQgZHVlIHRvCisjIFhJRCBhZ2UuCiskcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7Cit3YWl0X2Zvcl9zbG90X2ludmFs aWRhdGlvbigkcHJpbWFyeSwgJ3NiX3Nsb3QnLCAneGlkX2FnZWQnKTsKKworJHN0YW5kYnlfc2Vz c2lvbi0+cXVpdDsKKyRzdGFuZGJ5LT5zdG9wOworCisjIFRlc3RjYXNlIGVuZDogSW52YWxpZGF0 ZSBzdHJlYW1pbmcgc3RhbmRieSdzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VD LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRl c3RjYXNlIHN0YXJ0OiBJbnZhbGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRv IG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorCisjIENyZWF0ZSBhIHN1YnNjcmliZXIgbm9kZQor bXkgJHN1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmli ZXInKTsKKyRzdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRzdWJzY3JpYmVyLT5zdGFydDsKKworIyBDcmVhdGUgdGFibGVzIG9uIGJvdGggcHJpbWFyeSBh bmQgc3Vic2NyaWJlcgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRlc3RfdGJsIChpZCBpbnQpIik7Ciskc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlkIGludCkiKTsKKworIyBJbnNlcnQgc29tZSBp bml0aWFsIGRhdGEKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElO VE8gdGVzdF90YmwgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIpOworCisjIFNldHVw IGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRwcmltYXJ5LT5j b25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gcHViIEZPUiBUQUJMRSB0ZXN0X3RibCIpOworCisk c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04g c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViIFdJVEgg KHNsb3RfbmFtZSA9ICdsc3ViX3Nsb3QnKSIKKyk7CisKKyMgV2FpdCBmb3IgaW5pdGlhbCBzeW5j IHRvIGNvbXBsZXRlCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJHBy aW1hcnksICdzdWInKTsKKworbXkgJHJlc3VsdCA9ICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGJsIik7CitpcygkcmVzdWx0LCBx cSg1KSwgImNoZWNrIGluaXRpYWwgY29weSB3YXMgZG9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlv biIpOworCisjIFdhaXQgZm9yIHRoZSBsb2dpY2FsIHNsb3QgdG8gZ2V0IGNhdGFsb2dfeG1pbiAo bG9naWNhbCBzbG90cyB1c2UgY2F0YWxvZ194bWluLCBub3QgeG1pbikKKyRwcmltYXJ5LT5wb2xs X3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCB4bWluIElTIE5VTEwgQU5E IGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTAorCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlv bl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdsc3ViX3Nsb3QnOworXSkgb3IgZGllICJUaW1l ZCBvdXQgd2FpdGluZyBmb3Igc2xvdCBsc3ViX3Nsb3QgY2F0YWxvZ194bWluIHRvIGFkdmFuY2Ui OworCisjIFN0b3Agc3Vic2NyaWJlciB0byBtYWtlIHRoZSByZXBsaWNhdGlvbiBzbG90IG9uIHBy aW1hcnkgaW5hY3RpdmUKKyRzdWJzY3JpYmVyLT5zdG9wOworCisjIERvIHNvbWUgd29yayB0byBh ZHZhbmNlIHhpZHMgb24gcHJpbWFyeQorYWR2YW5jZV94aWRzKCRwcmltYXJ5LCAndGVzdF90Ymwn KTsKKworIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZWNvbWUgaW5hY3RpdmUg YW5kIHRoZW4gaW52YWxpZGF0ZWQgZHVlIHRvCisjIFhJRCBhZ2UuCiskcHJpbWFyeS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7Cit3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlv bigkcHJpbWFyeSwgJ2xzdWJfc2xvdCcsICd4aWRfYWdlZCcpOworCisjIFRlc3RjYXNlIGVuZDog SW52YWxpZGF0ZSBsb2dpY2FsIHN1YnNjcmliZXIncyBzbG90IGR1ZSB0byBtYXhfc2xvdF94aWRf YWdlCisjIEdVQy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorIyBUZXN0Y2FzZSBzdGFydDogVGVzdCBWQUNVVU0gY29tbWFuZCB0cmlnZ2VyaW5nIHNs b3QgaW52YWxpZGF0aW9uCisjCisKKyMgQ3JlYXRlIGFub3RoZXIgcGh5c2ljYWwgcmVwbGljYXRp b24gc2xvdCBmb3IgVkFDVVVNIHRlc3QKKyRwcmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywgcXFbCisgICAgU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KHNs b3RfbmFtZSA6PSAndmFjdXVtX3Rlc3Rfc2xvdCcsIGltbWVkaWF0ZWx5X3Jlc2VydmUgOj0gdHJ1 ZSk7CitdKTsKKworIyBDcmVhdGUgYSBuZXcgc3RhbmRieSBmb3IgdGhpcyB0ZXN0CitteSAkc3Rh bmRieV92YWN1dW0gPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnlfdmFj dXVtJyk7Ciskc3RhbmRieV92YWN1dW0tPmluaXRfZnJvbV9iYWNrdXAoJHByaW1hcnksICRiYWNr dXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworJHN0YW5kYnlfdmFjdXVtLT5hcHBlbmRf Y29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3ZhY3V1 bV90ZXN0X3Nsb3QnCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2ZXJfc3Rh dHVzX2ludGVydmFsID0gMQorfSk7CisKKyRzdGFuZGJ5X3ZhY3V1bS0+c3RhcnQ7CisKKyMgV2Fp dCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0YSBhbmQgc2xvdCBnZXRzIHht aW4KKyRwcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5X3ZhY3V1bSk7CisKKyRwcmlt YXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCAoeG1pbiBJ UyBOT1QgTlVMTCkgT1IgKGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTCkKKwkJRlJPTSBwZ19jYXRh bG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9ICd2YWN1dW1fdGVz dF9zbG90JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3QgdmFjdXVtX3Rl c3Rfc2xvdCB4bWluIHRvIGFkdmFuY2UiOworCisjIFN0b3Agc3RhbmRieSB0byBtYWtlIHRoZSBy ZXBsaWNhdGlvbiBzbG90J3MgeG1pbiBvbiBwcmltYXJ5IHRvIGFnZQorJHN0YW5kYnlfdmFjdXVt LT5zdG9wOworCisjIERvIHNvbWUgd29yayB0byBhZHZhbmNlIHhpZHMgb24gcHJpbWFyeQorYWR2 YW5jZV94aWRzKCRwcmltYXJ5LCAndGFiX2ludCcpOworCisjIFVzZSBWQUNVVU0gdG8gdHJpZ2dl ciBzbG90IGludmFsaWRhdGlvbiAoaW5zdGVhZCBvZiBDSEVDS1BPSU5UKQorIyBUaGlzIHRlc3Rz IHRoYXQgVkFDVVVNIGNvbW1hbmQgY2FuIHRyaWdnZXIgWElEIGFnZSBpbnZhbGlkYXRpb24KKyRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlZBQ1VVTSIpOworCisjIFdhaXQgZm9yIHRo ZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZSB0 cmlnZ2VyZWQgYnkgVkFDVVVNCiskcHJpbWFyeS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdy ZXMnLCBxcVsKKwlTRUxFQ1QgQ09VTlQoc2xvdF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlv bl9zbG90cworCQlXSEVSRSBzbG90X25hbWUgPSAndmFjdXVtX3Rlc3Rfc2xvdCcgQU5ECisJCWlu dmFsaWRhdGlvbl9yZWFzb24gPSAneGlkX2FnZWQnOworXSkKKyAgb3IgZGllICJUaW1lZCBvdXQg d2hpbGUgd2FpdGluZyBmb3Igc2xvdCB2YWN1dW1fdGVzdF9zbG90IHRvIGJlIGludmFsaWRhdGVk IGJ5IFZBQ1VVTSI7CisKKyMgVGVzdGNhc2UgZW5kOiBUZXN0IFZBQ1VVTSBjb21tYW5kIHRyaWdn ZXJpbmcgc2xvdCBpbnZhbGlkYXRpb24KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb2soMSwg ImFsbCBYSUQgYWdlIGludmFsaWRhdGlvbiB0ZXN0cyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iik7 CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi41MC4xCgo= --00000000000050eea4063f169210--