Received: from maia.hub.org (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 5FA47632C6E for ; Mon, 1 Feb 2010 22:58:19 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 44979-03 for ; Tue, 2 Feb 2010 02:57:58 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pz0-f175.google.com (mail-pz0-f175.google.com [209.85.222.175]) by mail.postgresql.org (Postfix) with ESMTP id 4ABCB62DBF0 for ; Mon, 1 Feb 2010 22:58:07 -0400 (AST) Received: by pzk5 with SMTP id 5so5976624pzk.29 for ; Mon, 01 Feb 2010 18:58:05 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.9.3 with SMTP id 3mr3567857wfi.237.1265079165750; Mon, 01 Feb 2010 18:52:45 -0800 (PST) In-Reply-To: <4B66B7E0.3020605@gmail.com> References: <4B66B7E0.3020605@gmail.com> Date: Mon, 1 Feb 2010 21:52:45 -0500 Message-ID: Subject: Re: Slow query: table iteration (8.3) From: Glenn Maynard To: pgsql-performance@postgresql.org Content-Type: multipart/mixed; boundary=00504502afdf498e16047e95327a X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-2.599 tagged_above=-10 required=5 tests=BAYES_00=-2.599 X-Spam-Level: X-Archive-Number: 201002/3 X-Sequence-Number: 37424 --00504502afdf498e16047e95327a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Mon, Feb 1, 2010 at 6:15 AM, Yeb Havinga wrote: > Glenn Maynard wrote: >> SELECT highscores_for_steps_and_card(s.id, 591, 1) FROM stomp_steps s; >> Seq Scan on stomp_steps s =C2=A0(cost=3D0.00..793.52 rows=3D2902 width= =3D4) >> (actual time=3D26509.919..26509.919 rows=3D0 loops=3D1) >> Total runtime: 26509.972 ms > Stomp_steps is analyzed to 2902 rows but when you run the query the actua= l > rows are 0. This means that the highscore function is not called or the > number 0 is incorrect. This SELECT returns 0 rows: it calls the function 1500 times, and each time it returns no data, because there simply aren't any results for these parameters. > below. The truth might be that you probably got that result by explaining > the query in the function with actual parameter values. This plan differs > from the one that is made when the function is called from sql and is > planned (once) without parameters, and in that case the plan is probably > different. Yeah. It would help a lot if EXPLAIN could show query plans of functions used by the statement and not just the top-level query. > A way to check the plan of that query is to turn on > debug_print_plan and watch the server log. It takes a bit getting used. T= he > plan starts with CONTEXT: =C2=A0SQL function "functionname" during startu= p and is > also recognized because in the opexpr (operator expression) one of the > operands is a parameter. Important is the total cost of the top plan node > (the limit). Thanks. "SELECT highscores_for_steps_and_card(s.id, 591, 1) FROM stomp_steps s": Squinting at the output, it definitely looks like a less optimized plan; it's using a SEQSCAN instead of BITMAPHEAPSCAN. (I've attached the output.) Does the planner not optimize functions based on context? That seems like a huge class of optimizations. The first NULLTEST can be optimized away, since that parameter comes from a NOT NULL source (a PK). The second NULLTEST can also be optimized away, since it's a constant value (591). The search could be a BITMAPHEAPSCAN, substituting the s.id value for each call, instead of a SEQSCAN. (Not that I'm concerned about a few cheap NULLTESTs, I'm just surprised at it using such a generic plan.) If I create a new function with the constant parameters hard-coded, it's back to BITMAPHEAPSCAN: 175ms. This suggests a horrible workaround: creating temporary functions every time I make this type of query, with the fixed values substituted textually. I'd really love to know a less awful fix. > I know 8.3 is mentioned in the subject, but I think that a WITH query > (http://www.postgresql.org/docs/8.4/interactive/queries-with.html) could = be > a good solution to your problem and may be worth trying out, if you have = the > possibility to try out 8.4. I can't see how to apply WITH to this. Non-recursive WITH seems like syntax sugar that doesn't do anything a plain SELECT can't do, and I don't think what I'm doing here can be done with a regular SELECT. --=20 Glenn Maynard --00504502afdf498e16047e95327a Content-Type: text/plain; charset=US-ASCII; name="debug.txt" Content-Disposition: attachment; filename="debug.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g562t6nm0 U0VMRUNUIGhpZ2hzY29yZXNfZm9yX3N0ZXBzX2FuZF9jYXJkKHMuaWQsIDU5MSwgMSkgRlJPTSBz dG9tcF9zdGVwcyBzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFODQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIFNlcSBTY2FuIG9uIHN0b21wX3N0ZXBzIHMgIChj b3N0PTAuMDAuLjc5My41MiByb3dzPTI5MDIgd2lkdGg9NCkgKGFjdHVhbCB0aW1lPTE3MjYuOTk4 Li4yNjcyOS43MTcgcm93cz0xNyBsb29wcz0xKQ0KIFRvdGFsIHJ1bnRpbWU6IDI2NzI5LjgyMiBt cw0KDQpERUJVRzogIHBsYW46DQpERVRBSUw6ICAgICB7UExBTk5FRFNUTVQNCiAgIDpjb21tYW5k VHlwZSAxDQogICA6Y2FuU2V0VGFnIHRydWUNCiAgIDpwbGFuVHJlZQ0KICAgICAge1NFUVNDQU4N CiAgICAgIDpzdGFydHVwX2Nvc3QgMC4wMA0KICAgICAgOnRvdGFsX2Nvc3QgNzkzLjUyDQogICAg ICA6cGxhbl9yb3dzIDI5MDINCiAgICAgIDpwbGFuX3dpZHRoIDQNCiAgICAgIDp0YXJnZXRsaXN0 ICgNCiAgICAgICAgIHtUQVJHRVRFTlRSWQ0KICAgICAgICAgOmV4cHINCiAgICAgICAgICAgIHtG VU5DRVhQUg0KICAgICAgICAgICAgOmZ1bmNpZCAyNDA1MzINCiAgICAgICAgICAgIDpmdW5jcmVz dWx0dHlwZSAyMw0KICAgICAgICAgICAgOmZ1bmNyZXRzZXQgdHJ1ZQ0KICAgICAgICAgICAgOmZ1 bmNmb3JtYXQgMA0KICAgICAgICAgICAgOmFyZ3MgKA0KICAgICAgICAgICAgICAge1ZBUg0KICAg ICAgICAgICAgICAgOnZhcm5vIDENCiAgICAgICAgICAgICAgIDp2YXJhdHRubyAxDQogICAgICAg ICAgICAgICA6dmFydHlwZSAyMw0KICAgICAgICAgICAgICAgOnZhcnR5cG1vZCAtMQ0KICAgICAg ICAgICAgICAgOnZhcmxldmVsc3VwIDANCiAgICAgICAgICAgICAgIDp2YXJub29sZCAxDQogICAg ICAgICAgICAgICA6dmFyb2F0dG5vIDENCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg IHtDT05TVA0KICAgICAgICAgICAgICAgOmNvbnN0dHlwZSAyMw0KICAgICAgICAgICAgICAgOmNv bnN0dHlwbW9kIC0xDQogICAgICAgICAgICAgICA6Y29uc3RsZW4gNA0KICAgICAgICAgICAgICAg OmNvbnN0Ynl2YWwgdHJ1ZQ0KICAgICAgICAgICAgICAgOmNvbnN0aXNudWxsIGZhbHNlDQogICAg ICAgICAgICAgICA6Y29uc3R2YWx1ZSA0IFsgNzkgMiAwIDAgXQ0KICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAge0NPTlNUDQogICAgICAgICAgICAgICA6Y29uc3R0eXBlIDIzDQogICAg ICAgICAgICAgICA6Y29uc3R0eXBtb2QgLTENCiAgICAgICAgICAgICAgIDpjb25zdGxlbiA0DQog ICAgICAgICAgICAgICA6Y29uc3RieXZhbCB0cnVlDQogICAgICAgICAgICAgICA6Y29uc3Rpc251 bGwgZmFsc2UNCiAgICAgICAgICAgICAgIDpjb25zdHZhbHVlIDQgWyAxIDAgMCAwIF0NCiAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICkNCiAgICAgICAgICAgIH0NCiAgICAgICAgIDpyZXNu byAxDQogICAgICAgICA6cmVzbmFtZSBoaWdoc2NvcmVzX2Zvcl9zdGVwc19hbmRfY2FyZA0KICAg ICAgICAgOnJlc3NvcnRncm91cHJlZiAwDQogICAgICAgICA6cmVzb3JpZ3RibCAwDQogICAgICAg ICA6cmVzb3JpZ2NvbCAwDQogICAgICAgICA6cmVzanVuayBmYWxzZQ0KICAgICAgICAgfQ0KICAg ICAgKQ0KICAgICAgOnF1YWwgPD4NCiAgICAgIDpsZWZ0dHJlZSA8Pg0KICAgICAgOnJpZ2h0dHJl ZSA8Pg0KICAgICAgOmluaXRQbGFuIDw+DQogICAgICA6ZXh0UGFyYW0gKGIpDQogICAgICA6YWxs UGFyYW0gKGIpDQogICAgICA6c2NhbnJlbGlkIDENCiAgICAgIH0NCiAgIDpydGFibGUgKA0KICAg ICAge1JURQ0KICAgICAgOmFsaWFzDQogICAgICAgICB7QUxJQVMNCiAgICAgICAgIDphbGlhc25h bWUgcw0KICAgICAgICAgOmNvbG5hbWVzIDw+DQogICAgICAgICB9DQogICAgICA6ZXJlZg0KICAg ICAgICAge0FMSUFTDQogICAgICAgICA6YWxpYXNuYW1lIHMNCiAgICAgICAgIDpjb2xuYW1lcyAo ImlkIiAuLi4pDQogICAgICAgICB9DQogICAgICA6cnRla2luZCAwDQogICAgICA6cmVsaWQgMjQw MTAwDQogICAgICA6aW5oIGZhbHNlDQogICAgICA6aW5Gcm9tQ2wgdHJ1ZQ0KICAgICAgOnJlcXVp cmVkUGVybXMgMg0KICAgICAgOmNoZWNrQXNVc2VyIDANCiAgICAgIH0NCiAgICkNCiAgIDpyZXN1 bHRSZWxhdGlvbnMgPD4NCiAgIDp1dGlsaXR5U3RtdCA8Pg0KICAgOmludG9DbGF1c2UgPD4NCiAg IDpzdWJwbGFucyA8Pg0KICAgOnJld2luZFBsYW5JRHMgKGIpDQogICA6cmV0dXJuaW5nTGlzdHMg PD4NCiAgIDpyb3dNYXJrcyA8Pg0KICAgOnJlbGF0aW9uT2lkcyAobyAyNDAxMDApDQogICA6blBh cmFtRXhlYyAwDQogICB9DQoNCkRFQlVHOiAgcGxhbjoNCkRFVEFJTDogICAgIHtQTEFOTkVEU1RN VA0KICAgOmNvbW1hbmRUeXBlIDENCiAgIDpjYW5TZXRUYWcgdHJ1ZQ0KICAgOnBsYW5UcmVlDQog ICAgICB7TElNSVQNCiAgICAgIDpzdGFydHVwX2Nvc3QgNjE1LjU5DQogICAgICA6dG90YWxfY29z dCA2MTUuNjANCiAgICAgIDpwbGFuX3Jvd3MgMQ0KICAgICAgOnBsYW5fd2lkdGggOA0KICAgICAg OnRhcmdldGxpc3QgKA0KICAgICAgICAge1RBUkdFVEVOVFJZDQogICAgICAgICA6ZXhwcg0KICAg ICAgICAgICAge1ZBUg0KICAgICAgICAgICAgOnZhcm5vIDY1MDAxDQogICAgICAgICAgICA6dmFy YXR0bm8gMQ0KICAgICAgICAgICAgOnZhcnR5cGUgMjMNCiAgICAgICAgICAgIDp2YXJ0eXBtb2Qg LTENCiAgICAgICAgICAgIDp2YXJsZXZlbHN1cCAwDQogICAgICAgICAgICA6dmFybm9vbGQgMQ0K ICAgICAgICAgICAgOnZhcm9hdHRubyAxDQogICAgICAgICAgICB9DQogICAgICAgICA6cmVzbm8g MQ0KICAgICAgICAgOnJlc25hbWUgaWQNCiAgICAgICAgIDpyZXNzb3J0Z3JvdXByZWYgMA0KICAg ICAgICAgOnJlc29yaWd0YmwgMjQwMzc1DQogICAgICAgICA6cmVzb3JpZ2NvbCAxDQogICAgICAg ICA6cmVzanVuayBmYWxzZQ0KICAgICAgICAgfQ0KICAgICAgICAge1RBUkdFVEVOVFJZDQogICAg ICAgICA6ZXhwcg0KICAgICAgICAgICAge1ZBUg0KICAgICAgICAgICAgOnZhcm5vIDY1MDAxDQog ICAgICAgICAgICA6dmFyYXR0bm8gMg0KICAgICAgICAgICAgOnZhcnR5cGUgNzAwDQogICAgICAg ICAgICA6dmFydHlwbW9kIC0xDQogICAgICAgICAgICA6dmFybGV2ZWxzdXAgMA0KICAgICAgICAg ICAgOnZhcm5vb2xkIDENCiAgICAgICAgICAgIDp2YXJvYXR0bm8gMTQNCiAgICAgICAgICAgIH0N CiAgICAgICAgIDpyZXNubyAyDQogICAgICAgICA6cmVzbmFtZSA8Pg0KICAgICAgICAgOnJlc3Nv cnRncm91cHJlZiAxDQogICAgICAgICA6cmVzb3JpZ3RibCAwDQogICAgICAgICA6cmVzb3JpZ2Nv bCAwDQogICAgICAgICA6cmVzanVuayB0cnVlDQogICAgICAgICB9DQogICAgICApDQogICAgICA6 cXVhbCA8Pg0KICAgICAgOmxlZnR0cmVlDQogICAgICAgICB7U09SVA0KICAgICAgICAgOnN0YXJ0 dXBfY29zdCA2MTUuNTkNCiAgICAgICAgIDp0b3RhbF9jb3N0IDYxNS42MA0KICAgICAgICAgOnBs YW5fcm93cyAxDQogICAgICAgICA6cGxhbl93aWR0aCA4DQogICAgICAgICA6dGFyZ2V0bGlzdCAo DQogICAgICAgICAgICB7VEFSR0VURU5UUlkNCiAgICAgICAgICAgIDpleHByDQogICAgICAgICAg ICAgICB7VkFSDQogICAgICAgICAgICAgICA6dmFybm8gNjUwMDENCiAgICAgICAgICAgICAgIDp2 YXJhdHRubyAxDQogICAgICAgICAgICAgICA6dmFydHlwZSAyMw0KICAgICAgICAgICAgICAgOnZh cnR5cG1vZCAtMQ0KICAgICAgICAgICAgICAgOnZhcmxldmVsc3VwIDANCiAgICAgICAgICAgICAg IDp2YXJub29sZCAxDQogICAgICAgICAgICAgICA6dmFyb2F0dG5vIDENCiAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgIDpyZXNubyAxDQogICAgICAgICAgICA6cmVzbmFtZSBpZA0KICAgICAg ICAgICAgOnJlc3NvcnRncm91cHJlZiAwDQogICAgICAgICAgICA6cmVzb3JpZ3RibCAyNDAzNzUN CiAgICAgICAgICAgIDpyZXNvcmlnY29sIDENCiAgICAgICAgICAgIDpyZXNqdW5rIGZhbHNlDQog ICAgICAgICAgICB9DQogICAgICAgICAgICB7VEFSR0VURU5UUlkNCiAgICAgICAgICAgIDpleHBy DQogICAgICAgICAgICAgICB7VkFSDQogICAgICAgICAgICAgICA6dmFybm8gNjUwMDENCiAgICAg ICAgICAgICAgIDp2YXJhdHRubyAyDQogICAgICAgICAgICAgICA6dmFydHlwZSA3MDANCiAgICAg ICAgICAgICAgIDp2YXJ0eXBtb2QgLTENCiAgICAgICAgICAgICAgIDp2YXJsZXZlbHN1cCAwDQog ICAgICAgICAgICAgICA6dmFybm9vbGQgMQ0KICAgICAgICAgICAgICAgOnZhcm9hdHRubyAxNA0K ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgOnJlc25vIDINCiAgICAgICAgICAgIDpyZXNu YW1lIDw+DQogICAgICAgICAgICA6cmVzc29ydGdyb3VwcmVmIDENCiAgICAgICAgICAgIDpyZXNv cmlndGJsIDANCiAgICAgICAgICAgIDpyZXNvcmlnY29sIDANCiAgICAgICAgICAgIDpyZXNqdW5r IHRydWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICkNCiAgICAgICAgIDpxdWFsIDw+DQogICAg ICAgICA6bGVmdHRyZWUNCiAgICAgICAgICAgIHtTRVFTQ0FODQogICAgICAgICAgICA6c3RhcnR1 cF9jb3N0IDAuMDANCiAgICAgICAgICAgIDp0b3RhbF9jb3N0IDYxNS41OA0KICAgICAgICAgICAg OnBsYW5fcm93cyAxDQogICAgICAgICAgICA6cGxhbl93aWR0aCA4DQogICAgICAgICAgICA6dGFy Z2V0bGlzdCAoDQogICAgICAgICAgICAgICB7VEFSR0VURU5UUlkNCiAgICAgICAgICAgICAgIDpl eHByDQogICAgICAgICAgICAgICAgICB7VkFSDQogICAgICAgICAgICAgICAgICA6dmFybm8gMQ0K ICAgICAgICAgICAgICAgICAgOnZhcmF0dG5vIDENCiAgICAgICAgICAgICAgICAgIDp2YXJ0eXBl IDIzDQogICAgICAgICAgICAgICAgICA6dmFydHlwbW9kIC0xDQogICAgICAgICAgICAgICAgICA6 dmFybGV2ZWxzdXAgMA0KICAgICAgICAgICAgICAgICAgOnZhcm5vb2xkIDENCiAgICAgICAgICAg ICAgICAgIDp2YXJvYXR0bm8gMQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg OnJlc25vIDENCiAgICAgICAgICAgICAgIDpyZXNuYW1lIGlkDQogICAgICAgICAgICAgICA6cmVz c29ydGdyb3VwcmVmIDANCiAgICAgICAgICAgICAgIDpyZXNvcmlndGJsIDI0MDM3NQ0KICAgICAg ICAgICAgICAgOnJlc29yaWdjb2wgMQ0KICAgICAgICAgICAgICAgOnJlc2p1bmsgZmFsc2UNCiAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgIHtUQVJHRVRFTlRSWQ0KICAgICAgICAgICAg ICAgOmV4cHINCiAgICAgICAgICAgICAgICAgIHtWQVINCiAgICAgICAgICAgICAgICAgIDp2YXJu byAxDQogICAgICAgICAgICAgICAgICA6dmFyYXR0bm8gMTQNCiAgICAgICAgICAgICAgICAgIDp2 YXJ0eXBlIDcwMA0KICAgICAgICAgICAgICAgICAgOnZhcnR5cG1vZCAtMQ0KICAgICAgICAgICAg ICAgICAgOnZhcmxldmVsc3VwIDANCiAgICAgICAgICAgICAgICAgIDp2YXJub29sZCAxDQogICAg ICAgICAgICAgICAgICA6dmFyb2F0dG5vIDE0DQogICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICA6cmVzbm8gMg0KICAgICAgICAgICAgICAgOnJlc25hbWUgPD4NCiAgICAgICAgICAg ICAgIDpyZXNzb3J0Z3JvdXByZWYgMQ0KICAgICAgICAgICAgICAgOnJlc29yaWd0YmwgMA0KICAg ICAgICAgICAgICAgOnJlc29yaWdjb2wgMA0KICAgICAgICAgICAgICAgOnJlc2p1bmsgdHJ1ZQ0K ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgOnF1YWwgKA0KICAg ICAgICAgICAgICAge0JPT0xFWFBSDQogICAgICAgICAgICAgICA6Ym9vbG9wIG9yDQogICAgICAg ICAgICAgICA6YXJncyAoDQogICAgICAgICAgICAgICAgICB7TlVMTFRFU1QNCiAgICAgICAgICAg ICAgICAgIDphcmcNCiAgICAgICAgICAgICAgICAgICAgIHtQQVJBTQ0KICAgICAgICAgICAgICAg ICAgICAgOnBhcmFta2luZCAwDQogICAgICAgICAgICAgICAgICAgICA6cGFyYW1pZCAxDQogICAg ICAgICAgICAgICAgICAgICA6cGFyYW10eXBlIDIzDQogICAgICAgICAgICAgICAgICAgICA6cGFy YW10eXBtb2QgLTENCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIDpu dWxsdGVzdHR5cGUgMA0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAge09Q RVhQUg0KICAgICAgICAgICAgICAgICAgOm9wbm8gOTYNCiAgICAgICAgICAgICAgICAgIDpvcGZ1 bmNpZCA2NQ0KICAgICAgICAgICAgICAgICAgOm9wcmVzdWx0dHlwZSAxNg0KICAgICAgICAgICAg ICAgICAgOm9wcmV0c2V0IGZhbHNlDQogICAgICAgICAgICAgICAgICA6YXJncyAoDQogICAgICAg ICAgICAgICAgICAgICB7VkFSDQogICAgICAgICAgICAgICAgICAgICA6dmFybm8gMQ0KICAgICAg ICAgICAgICAgICAgICAgOnZhcmF0dG5vIDEwDQogICAgICAgICAgICAgICAgICAgICA6dmFydHlw ZSAyMw0KICAgICAgICAgICAgICAgICAgICAgOnZhcnR5cG1vZCAtMQ0KICAgICAgICAgICAgICAg ICAgICAgOnZhcmxldmVsc3VwIDANCiAgICAgICAgICAgICAgICAgICAgIDp2YXJub29sZCAxDQog ICAgICAgICAgICAgICAgICAgICA6dmFyb2F0dG5vIDEwDQogICAgICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgICAgICB7UEFSQU0NCiAgICAgICAgICAgICAgICAgICAgIDpwYXJh bWtpbmQgMA0KICAgICAgICAgICAgICAgICAgICAgOnBhcmFtaWQgMQ0KICAgICAgICAgICAgICAg ICAgICAgOnBhcmFtdHlwZSAyMw0KICAgICAgICAgICAgICAgICAgICAgOnBhcmFtdHlwbW9kIC0x DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICApDQogICAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICB7Qk9PTEVYUFINCiAgICAgICAgICAgICAgIDpib29sb3Agb3INCiAgICAgICAgICAgICAg IDphcmdzICgNCiAgICAgICAgICAgICAgICAgIHtOVUxMVEVTVA0KICAgICAgICAgICAgICAgICAg OmFyZw0KICAgICAgICAgICAgICAgICAgICAge1BBUkFNDQogICAgICAgICAgICAgICAgICAgICA6 cGFyYW1raW5kIDANCiAgICAgICAgICAgICAgICAgICAgIDpwYXJhbWlkIDINCiAgICAgICAgICAg ICAgICAgICAgIDpwYXJhbXR5cGUgMjMNCiAgICAgICAgICAgICAgICAgICAgIDpwYXJhbXR5cG1v ZCAtMQ0KICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgOm51bGx0ZXN0 dHlwZSAwDQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB7T1BFWFBSDQog ICAgICAgICAgICAgICAgICA6b3BubyA5Ng0KICAgICAgICAgICAgICAgICAgOm9wZnVuY2lkIDY1 DQogICAgICAgICAgICAgICAgICA6b3ByZXN1bHR0eXBlIDE2DQogICAgICAgICAgICAgICAgICA6 b3ByZXRzZXQgZmFsc2UNCiAgICAgICAgICAgICAgICAgIDphcmdzICgNCiAgICAgICAgICAgICAg ICAgICAgIHtWQVINCiAgICAgICAgICAgICAgICAgICAgIDp2YXJubyAxDQogICAgICAgICAgICAg ICAgICAgICA6dmFyYXR0bm8gNA0KICAgICAgICAgICAgICAgICAgICAgOnZhcnR5cGUgMjMNCiAg ICAgICAgICAgICAgICAgICAgIDp2YXJ0eXBtb2QgLTENCiAgICAgICAgICAgICAgICAgICAgIDp2 YXJsZXZlbHN1cCAwDQogICAgICAgICAgICAgICAgICAgICA6dmFybm9vbGQgMQ0KICAgICAgICAg ICAgICAgICAgICAgOnZhcm9hdHRubyA0DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgICB7UEFSQU0NCiAgICAgICAgICAgICAgICAgICAgIDpwYXJhbWtpbmQgMA0K ICAgICAgICAgICAgICAgICAgICAgOnBhcmFtaWQgMg0KICAgICAgICAgICAgICAgICAgICAgOnBh cmFtdHlwZSAyMw0KICAgICAgICAgICAgICAgICAgICAgOnBhcmFtdHlwbW9kIC0xDQogICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICApDQogICAg ICAgICAgICA6bGVmdHRyZWUgPD4NCiAgICAgICAgICAgIDpyaWdodHRyZWUgPD4NCiAgICAgICAg ICAgIDppbml0UGxhbiA8Pg0KICAgICAgICAgICAgOmV4dFBhcmFtIChiKQ0KICAgICAgICAgICAg OmFsbFBhcmFtIChiKQ0KICAgICAgICAgICAgOnNjYW5yZWxpZCAxDQogICAgICAgICAgICB9DQog ICAgICAgICA6cmlnaHR0cmVlIDw+DQogICAgICAgICA6aW5pdFBsYW4gPD4NCiAgICAgICAgIDpl eHRQYXJhbSAoYikNCiAgICAgICAgIDphbGxQYXJhbSAoYikNCiAgICAgICAgIDpudW1Db2xzIDEN CiAgICAgICAgIDpzb3J0Q29sSWR4IDINCiAgICAgICAgIDpzb3J0T3BlcmF0b3JzIDYyMw0KICAg ICAgICAgOm51bGxzRmlyc3QgdHJ1ZQ0KICAgICAgICAgfQ0KICAgICAgOnJpZ2h0dHJlZSA8Pg0K ICAgICAgOmluaXRQbGFuIDw+DQogICAgICA6ZXh0UGFyYW0gKGIpDQogICAgICA6YWxsUGFyYW0g KGIpDQogICAgICA6bGltaXRPZmZzZXQgPD4NCiAgICAgIDpsaW1pdENvdW50DQogICAgICAgICB7 RlVOQ0VYUFINCiAgICAgICAgIDpmdW5jaWQgNDgxDQogICAgICAgICA6ZnVuY3Jlc3VsdHR5cGUg MjANCiAgICAgICAgIDpmdW5jcmV0c2V0IGZhbHNlDQogICAgICAgICA6ZnVuY2Zvcm1hdCAyDQog ICAgICAgICA6YXJncyAoDQogICAgICAgICAgICB7UEFSQU0NCiAgICAgICAgICAgIDpwYXJhbWtp bmQgMA0KICAgICAgICAgICAgOnBhcmFtaWQgMw0KICAgICAgICAgICAgOnBhcmFtdHlwZSAyMw0K ICAgICAgICAgICAgOnBhcmFtdHlwbW9kIC0xDQogICAgICAgICAgICB9DQogICAgICAgICApDQog ICAgICAgICB9DQogICAgICB9DQogICA6cnRhYmxlICgNCiAgICAgIHtSVEUNCiAgICAgIDphbGlh cw0KICAgICAgICAge0FMSUFTDQogICAgICAgICA6YWxpYXNuYW1lIHINCiAgICAgICAgIDpjb2xu YW1lcyA8Pg0KICAgICAgICAgfQ0KICAgICAgOmVyZWYNCiAgICAgICAgIHtBTElBUw0KICAgICAg ICAgOmFsaWFzbmFtZSByDQogICAgICAgICA6Y29sbmFtZXMgKCJpZCIgInN0ZXBzX2lkIiAuLi4p DQogICAgICAgICB9DQogICAgICA6cnRla2luZCAwDQogICAgICA6cmVsaWQgMjQwMzc1DQogICAg ICA6aW5oIGZhbHNlDQogICAgICA6aW5Gcm9tQ2wgdHJ1ZQ0KICAgICAgOnJlcXVpcmVkUGVybXMg Mg0KICAgICAgOmNoZWNrQXNVc2VyIDANCiAgICAgIH0NCiAgICkNCiAgIDpyZXN1bHRSZWxhdGlv bnMgPD4NCiAgIDp1dGlsaXR5U3RtdCA8Pg0KICAgOmludG9DbGF1c2UgPD4NCiAgIDpzdWJwbGFu cyA8Pg0KICAgOnJld2luZFBsYW5JRHMgKGIpDQogICA6cmV0dXJuaW5nTGlzdHMgPD4NCiAgIDpy b3dNYXJrcyA8Pg0KICAgOnJlbGF0aW9uT2lkcyAobyAyNDAzNzUpDQogICA6blBhcmFtRXhlYyAw DQogICB9DQoNCg== --00504502afdf498e16047e95327a--