X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.2]) by svr1.postgresql.org (Postfix) with ESMTP id 4A803D1E931 for ; Mon, 1 Mar 2004 15:20:45 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (neptune.hub.org [200.46.204.2]) (amavisd-new, port 10024) with ESMTP id 56702-08 for ; Mon, 1 Mar 2004 11:20:42 -0400 (AST) Received: from out1.smtp.messagingengine.com (out1.smtp.messagingengine.com [66.111.4.25]) by svr1.postgresql.org (Postfix) with ESMTP id 7CB87D1E924 for ; Mon, 1 Mar 2004 11:20:35 -0400 (AST) X-Sasl-enc: +c0CBoaF2SxLqN7MLP1BTw 1078154403 Received: from isd.canberra.edu.au (unknown [203.37.117.70]) by www.fastmail.fm (Postfix) with ESMTP id 31C0168EDFD; Mon, 1 Mar 2004 10:20:01 -0500 (EST) Message-ID: <40435499.7050805@isd.canberra.edu.au> Date: Tue, 02 Mar 2004 02:19:53 +1100 From: Terence Kearns Reply-To: terence.kearns@canberra.edu.au Organization: University Of Canberra User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tom Lane , pgsql-sql@postgresql.org Subject: Re: returning a recordset from PLpg/SQL References: <4041DCBF.203@isd.canberra.edu.au> <14883.1078067508@sss.pgh.pa.us> In-Reply-To: <14883.1078067508@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="------------040606070305090304040806" X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200403/3 X-Sequence-Number: 17102 This is a multi-part message in MIME format. --------------040606070305090304040806 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Lane wrote: > Terence Kearns writes: > >>I tried >>RETURNS SETOF RECORD >>but that doesn't work > > > Sure it does, if you use it correctly. Better show us what you did. > > regards, tom lane Well I haven't yet done anything because I couldn't get anything to compile which returned SETOF RECORD.. I'll write some code which I would like to work. Here's the relevent part of the schema: (see attached gif for full diagram) CREATE DOMAIN docs.context AS varchar(32) NOT NULL; CREATE TABLE docs.documents ( doc_id int4 NOT NULL DEFAULT nextval('docs.seq_docs_doc_id'::text), doc_title varchar(256) NOT NULL, doc_summary varchar(512), doc_folder_id int4 NOT NULL, doc_sort_index int4, CONSTRAINT pkey_docs PRIMARY KEY (doc_id), CONSTRAINT fkey_documents_folder_id FOREIGN KEY (doc_folder_id) REFERENCES docs.folders (folder_id) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT unique_doc_id_folder_id UNIQUE (doc_id, doc_folder_id) ) WITHOUT OIDS; COMMENT ON TABLE docs.documents IS 'This table records a LOGICAL document (as opposed to it\'s physical incarnation). Metadata plus extra attribute_values are recorded against this entity. Details regarding physical manifestations of these documents are contained in the document_instance table which might contain versions of the same document, but in different formats or in different locations (mirrors). Versioning information is also kept as a field in the document instance table (and not in a dedicated document version table for reasons of performance and simplicity).'; CREATE TABLE docs.attribute_profiles ( att_profile_id int4 NOT NULL DEFAULT nextval('docs.seq_attribute_profiles_att_profile'::text), att_profile_title varchar(128) NOT NULL, att_profile_description text, att_profile_context docs.context, CONSTRAINT pkey_attribute_profiles PRIMARY KEY (att_profile_id), CONSTRAINT fkey_att_profile_context FOREIGN KEY (att_profile_context) REFERENCES docs.contexts (context) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT unique_att_profile_title_context UNIQUE (att_profile_title, att_profile_context) ) WITHOUT OIDS; COMMENT ON TABLE docs.attribute_profiles IS 'This table keeps a list of entity attribute collections. This list is divided into application contexts. The application can then select from a list of profiles in it\'s own context and use each profile to build the data entry form. Form building is the main usage of this table. Insert and lookup of user data does not require this table. The attribute_value table(s) is used for that.'; CREATE TABLE docs.entity_attributes ( att_id int4 NOT NULL DEFAULT nextval('docs.seq_entity_attribute_id'::text), att_profile_id int4 NOT NULL, att_name varchar(128) NOT NULL, att_sort_index int4, att_data_type varchar(32) NOT NULL, att_is_metadata bool NOT NULL DEFAULT false, CONSTRAINT pkey_entity_attributes PRIMARY KEY (att_id), CONSTRAINT fkey_entity_attribute_profile_id FOREIGN KEY (att_profile_id) REFERENCES docs.attribute_profiles (att_profile_id) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT unique_att_name_profile_id UNIQUE (att_name, att_profile_id), CONSTRAINT check_entity_att_data_type CHECK att_data_type::text = 'timestamp'::text OR att_data_type::text = 'varchar'::text OR att_data_type::text = 'text'::text OR att_data_type::text = 'integer'::text ) WITHOUT OIDS; COMMENT ON TABLE docs.entity_attributes IS 'This table contains a list of user-defined (developer defined) entity fields/attributes. It is used to facilitate document entity exstensibility at runtime. In other words, you can add fields to the document information form without ALTERing the physical data structure of this schema. Corresponding user-data is not stored here, but in the attribute_value table(s). IMPORTANT: see comments on the att_data_type field.'; CREATE TABLE docs.document_attribute_values ( entity_att_id int4 NOT NULL, doc_id int4 NOT NULL, value_timestamp timestamp, value_varchar varchar(256), value_text text, value_integer int4, CONSTRAINT pkey_document_attribute_values PRIMARY KEY (entity_att_id, doc_id), CONSTRAINT fkey_document_attribute_values_att_id FOREIGN KEY (entity_att_id) REFERENCES docs.entity_attributes (att_id) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fkey_document_attribute_values_doc_id FOREIGN KEY (doc_id) REFERENCES docs.documents (doc_id) ON UPDATE RESTRICT ON DELETE RESTRICT ) WITHOUT OIDS; COMMENT ON TABLE docs.document_attribute_values IS 'This table contains user entries for document entity_attributes. The att_data_type field contained in the entity_attributes table identified by value_att_id points to the actual column in this table which ultimately stores the target data. In other words, apart from the entity_att_id and the doc_id field, only one out of the other fields is ever populated.'; So here's the desired function: (of course, there's probably a whole bunch of reasons why this sketched code won't work, I just want to know if the same outcome is at all possible). CREATE FUNCTION "docs"."details_for_profile" (docs.context, VARCHAR) RETURNS SETOF "RECORD" AS' DECLARE profile_context ALIAS FOR $1; profile_title ALIAS FOR $2; result_row record; lookup_row record; str_temp text; int_temp int4; BEGIN str_temp := ''''; FOR lookup_row IN SELECT att.* FROM attribute_profiles prf, entity_attributes att WHERE prf.att_profile_context = profile_context AND prf.att_profile_title = profile_title AND prf.att_profile_id = att.att_profile_id LOOP str_temp := str_temp || lookup_row.att_name || lookup_row.att_data_type'','' ; END LOOP; EXECUTE ''CREATE TYPE tmp_type ('' || ''doc_id int4,'' || ''doc_title varchar(256),'' || ''doc_summary varchar(512),'' || ''folder_id int4,'' || ''sort_index int4,'' || str_temp || ''profile_id int4'' '')''; result_row tmp_type; int_temp := 0; FOR lookup_row IN SELECT d.*, v.*, att.att_name, att.att_data_type FROM documents d, document_attribute_values v, entity_attributes att WHERE d.doc_id = v.doc_id AND v.entity_att_id = att.att_id ORDER BY d.doc_id LOOP IF int_temp != lookup_row.doc_id THEN IF int_temp !=0 THEN RETURN NEXT result_row; END IF; int_temp := lookup_row.doc_id; result_row.doc_id := lookup_row.doc_id; result_row.doc_title := lookup_row.doc_title; result_row.doc_summary := lookup_row.doc_summary; result_row.folder_id := lookup_row.folder_id; result_row.doc_id := lookup_row.doc_id; result_row.profile_id = lookup_row.profile_id; END IF; EXECUTE ''result_row.'' || lookup_row.att_name || '' := v.value_'' || lookup_row.att_data_type; END; RETURN NEXT result_row; RETURN; END; 'LANGUAGE 'plpgsql' STABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER; --------------040606070305090304040806 Content-Type: image/gif; name="docs schema.gif" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="docs schema.gif" R0lGODdhbQNEAncAACwAAAAAbQNEAocAAACAAAAAgACAgAAAAICAAIAAgIDA wMDA3MCmyvAAADMzAAAzADMAMzMWFhYcHBwiIiIpKSlVVVVNTU1CQkI5OTn/ fID/UFDWAJPM7P/v1sbn59atqZAz/wBmAACZAADMAAAAMwAzMwBmMwCZMwDM MwD/MwAAZgAzZgBmZgCZZgDMZgD/ZgAAmQAzmQBmmQCZmQDMmQD/mQAAzAAz zABmzACZzADMzAD/zABm/wCZ/wDM/wAA/zMzAP9mADOZADPMADP/ADMAM/8z MzNmMzOZMzPMMzP/MzMAZjMzZjNmZjOZZjPMZjP/ZjMAmTMzmTNmmTOZmTPM mTP/mTMAzDMzzDNmzDOZzDPMzDP/zDMz/zNm/zOZ/zPM/zP//zMAAGYzAGZm AGaZAGbMAGb/AGYAM2YzM2ZmM2aZM2bMM2b/M2YAZmYzZmZmZmaZZmbMZmYA mWYzmWZmmWaZmWbMmWb/mWYAzGYzzGaZzGbMzGb/zGYA/2Yz/2aZ/2bM/2b/ AMzMAP8AmZmZM5mZAJnMAJkAAJkzM5lmAJnMM5n/AJkAZpkzZplmM5mZZpnM Zpn/M5kzmZlmmZmZmZnMmZn/mZkAzJkzzJlmzGaZzJnMzJn/zJkA/5kz/5lm zJmZ/5nM/5n//5kAAMwzAJlmAMyZAMzMAMwAM5kzM8xmM8yZM8zMM8z/M8wA ZswzZsxmZpmZZszMZsz/ZpkAmcwzmcxmmcyZmczMmcz/mcwAzMwzzMxmzMyZ zMzMzMz/zMwA/8wz/8xm/5mZ/8zM/8z//8wzAMxmAP+ZAP8AM8wzM/9mM/+Z M//MM///M/8AZv8zZv9mZsyZZv/MZv//ZswAmf8zmf9mmf+Zmf/Mmf//mf8A zP8zzP9mzP+ZzP/MzP//zP8z//9m/8yZ///M////ZmZm/2b//2ZmZv//Zv9m //+lACFfX193d3eGhoaWlpbLy8uysrLX19fd3d3j4+Pq6urx8fH4+Pj/+/Cg oKSAgID/AAAA/wD//wAAAP//AP8A//////8I/wD/CRxIsKDBgwgTKlzIsKHD hxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN mzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavX 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 KMKW+Hrm9GhzIkyM/ygWDHrU6lWsWbWGTDqT6VatTm9GBVvW7FmEVdGuZduz K8+vHCtOzFmXasu2efXuLfv2ZVy+O8XiDFzYsEm1hxUr9qsTsNypHRMvplzZ MlKNXi/LHPx082fDk0GPxtqY5mOVokmvZl06M+fWJinanP8d2/ZW1bd1rzSt eWfu3cGFj+yNEvVwhhaRL+cJnPlzhcX/NscL3bp16bKvP1S+3ftI59+ZZ1d5 HGV48ek3kydpnrlT9+q9o5e/m71x6hvr7/98X2R85MQCkL/lguLlQAQTVHBB Bht08EEII5RwQgortPBCDP3T7rfqDhrQw5o2DAmwD9+D6aQSh9IQpBR1g4/A /TTCZ0Yaa7TxRhxz1HFHHnv08UcggxRySCJpdEmw/IRiaCkRWXwIxhaXXGvF ENWjDcYYM9RySy679PJLMBtUCq4kDZoqptpgiiyhhmar68w1QTyxTTTVfPNN qdiMLE3xzszTTTPXrC1NQqUqNE7/mqhsSr4XsVSvSEgjlXRSSiu1dEcmOdQP zTbNzPNENj/909PH7Npz1DlJVfNJUaNsrU4/UZW101YN/ZROUHVStCNXY4Ov V0eDFXY7YIGqzlRV5arV1lylnPVZQ2MVVU5m04MVVDoJtctOWq9tdqZdlWUU o2KHNfdc4cpVSC1kU1V2W2wXanfUeWmd1lNqv/PW21BvTZZfdVl6bbr6Akb3 YIRJ+9BN89hdtd4nIS714WvbjRXReL+9bl93n63T1o9xvVemcB0q9lKUU1Z5 ZZZZTvjlywYUkKPELhYU44455VTeTkXWOdBb7fXwZ2t7zphPbR/2l16DMTty pZPDlHpq/6qrtprqMWHW+jCZxzqOPqya3toxFQeGOjUl/2FnbXbGXu5pt+Ne q2ucGE4T7IcYHsnuflPiW26/y4Y78JQ2WnsfpfZZG0fASRu8ccivonssyqPC O3LMDSpZXrTZwWeffyIKnSyDss48qyE1N/101n2y+3U3K5cdgMtbb3xzVs/j hW3QQ+eTKj2hxhlRnGFeXTLVbVe+rM4qz6jD5ZXHve+TBmJnHwHYIWB77rvf Pni/USNe7PlEyvrx6NP/ScC5MHqqdvW1nt7Z6ncXICLv8ycgUG1vvpMpQEVr ZwLUWQG55SjTATAh5zte/BzoGK9BRWTweyDC5pcvxOwOe6Rj1f+efIYrOK0K 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 AHUoB0XVwFjXtvrPoCXTpCLa6ChbozhbtPWSpT1ctrWKmfFGhI3bX6ta75Mp hSJI8eFBeDrFaPXToRXCn+WWzJVXwsW6pAhL0z3diwvUxr1JuIXcyZzbyTUm VykWoxXXx7W60b0mr+E9SEpZ/9e1ClWdIt9tWbeFGcSkVY+11eEFKNWVHcp5 ntb93SuU3OU0y9qluuXtJ/NbSNhx3ue1S+nNSOq1yLu8XiU8zH77WsrA08vY 3v/wXsIA3/AtufHNSr40XyRFX9e0vQQcDfcdkd2ljffJ3vn1J9itXq3EX/Ks 2WflX2f9XJ5NqaRjTn4xyORlU5OJIKnwQBoi4AIOzwMmX+vN3fOr1IYaRwXi Wl7Cu7kSSLP430u0CFntXf09LtnU248bWz7F4JEMYfstXxLewON71zHF4bzw 2xydp3S8Chj+LffYOCQJV41CGBU+ieBtpujdRgU2xjAl4jsU3LbwW2fkYSYm 4VdK1v+BRKcVPKcwQtBqWdYAdBQpnGDLNWKrAtfXPN/bFcktdtwbPGEQSVB1 bcYWtlR1vODK1EwTZip4FdP7k9b+K+SYJWRQzdjp9WFBndo+Zl0Gpk44vs5y tGQqdEKEM2NA7OK7ZTsC9CUWBlJVrmK+QGKfVWI7BmE8JmPszeK1DOIs9GD+ gOWiNeUywdSCNFNWpijre+WFpeRz1GHBueVEtt3ve8Yofk2uZV//5eVT3mPI KF642tnXhWa93MgwdWMAJWa3axW2auTs9A4xLuSs1YorftuadcxXihJgjuYS 0+ZhRrMmdsmda2A4XtcErVEU+mSAhBJRvhkcVOF5puEXJdf/fjTXd3JXTvxO Coas9ZHga63jfIbaqOXm8frnndRl1nJmB/po1xJnMK7Qh9W8AEShMbZDzPNU HK3lgEPmSjYVld7ktDTpwSJpmegtlu3m31Ego25n4wXnS2ZpnBbel1YVnvbZ yGrmibFYpCkKWUbQHJVbp1ZeoBYroW7LsP7gZ/aN5fTaeHYPrz1mGNVn2Gjl Zm5povBplxZpj0RklEZKs7Y2tCZftY5pZQRbZa7DvHUdSqbWNz3krzZbX16m sVbksu5rA3Zqmo3Xyn3WLvrTlgpkTiVlul7hvKvWhtYLu17VyeaoyKZbymbs v/7hB1JphzhtqMbr1Vrt2G1tC7Zs/9bmjKImXqau2OD2a8izbdTCbQTWbdfA ZL6+X37WFOMOamGGbuVu6tfOZOfWa9czsuOlKpeyYcuqQvHV7qfO3+iu7ju+ 7uYGYvIW4hpOrz01kQG7abGtZeQWYfQG3vrFbvZu7MINaE8eHhRsYMgE2hY+ VX60VgiGa4Eh7zN+7PymX+a2zPNWN9rG4hcV7DUtQCJlC4st0LZbvu8UoxS5 b9hu6Vx6R42F7/IePyk2tP1e7xFu715GZUPuIJ1VarBT57+lvB5Hur6VcP/e awrPY5yq0xU/8klejxgv8uwe8u228XjG2woe5LaG4AClZs/WaJEwcf62zoH+ OSD0zomu8v8//mWOntbSVtiHll+xfm5yzvCI3fClCu2s4FtZ3cPSQ2q1EnLE HmbDplgiTsfAnvOrxkNYbWXFlmlibPKD1WQ4B+gYFGh0wtwejODN/UKN9tz/ mVY+54rpjnOrLmbKg81Cd2XxieRp2sNZ9j2HdnRpfnK/hHDjVfIuD3VJl3Mv VuarxXGsTcZU73DreGex1XJ5hvVcrvAbPmcGxyALxGbQuHB6lo3fNpfj9fM3 FPVPFfQsH2xwNGe20/F0Sextb/GXaHNa11p7FqYdbw1ph+hC8/L1BnM1JmhE 7zxtLe1/XOKNWWg8EW/Xho3JPWh2tcUxl+iMJlDD/rw0T+M1j1z/Gt/meMf1 klb21ZNtkE5fi6RonxlQvP11Q/9icQ8cRS/3kc/ASK/4iXdwib+mal+s4b5E b6bimF9u3h54oO3ZVk91iEX1In52VNz5riZuw7R45s0M7k167m35CNfvCX90 dFbfZH5VegH2n5ccZr5x2X53N38iae/6ps94H93Lgg/yKe91u73xLT95nCr5 QDd3JEz5oU73U/p6ug/7jkD3yGNoofFH8FSqzNb3jYX74+Jphwd4iIfyEk7t o4946sZ7o9B7XVcfjB9cx398f5Z7yTZ6yMd2giF7x3j5vRH9MK75F9b8zV95 xa9xzu/8W3/6WO/vWWd87UX93Hb9ylZv/yeX/eI28mBx1TXWdJy2e9rHfZCQ fEi/fG1vdjnu0zOq7xYh/tY3frKF/WRP/tVn/Wit1stVa3zibEFHa/Eef3qi rJ8lvxK3/eSm/jnVfajn/aI/c+ZLKsNv0Lsb2jd0YcP3mKk6aukEiH8CBxIs OJAXPoQGFzJs6PAhxIIJExoEELFiRIsXN3LsOFCjR5AERf4j6fEkxpQoV7Is iFBhy5ExJ/KKafMmzpw6d558iY8nUIM0BYK0WLQkRABHiSJtapSpU6VPPzYN yrSo1Kokl0qdWlUmVLBhN/q0anVoQZM41ZqNyTZpxrYo38qNWXbtzJd19/Lt 65fh3b95KWotTP8X7FGNip1epSrSq9WpiamK9Wp54VLKmslOFDy4JlHJSj+O xlwya2ijpSuuRn0aK2zSbFU3fm37Nm7UahVDFqx6tO7WohcfbhvYZnGIaD0z b+4c5fHnHNHyNrxZs2jGSBdvD/31e2TKwLFbP104bGbwyV12lt6RuvfJYx3T r63ysvzu9ncT564/P36mVddcgOWNd9V6VkXXUoINLecehBE+t6CEDuoVX2qy NeTaeNxJBlWHae312FMk+lfdZRpi19V1EVFYoVAXAgieiFyll1ZWW+EY3Ehv zVhbfujRmCJzBXaFH4sNBvXiXJ/B+CSUcjEZ5T8PUjnflQ4pKRZHU0L/Cd9+ NMqUnn8i2jffbGbed95/9ZG3G5ueGalmb1vy5GVHdkp0IZbf6bnRen+aJWhI FxEqEJ5PWgnokSNmyZGdeiZaIZgH6jdkeZeaaWmBlxLZY5hAutnpmN4RaGB9 nIrZ16SGOtmnn4O6WuGhkM7aUqsSLvoorxDmCuFyB3K4Wo3ilUYsqLzFliGz uNVYJo+5CVemsas6mpiypEVFrWC/PnQodccei+FtvalYbo7inujac8JOe+65 wQGnLnrsQtderwLtmi+/nnkr3b79Aiqwe7UC9e+Gr2rXHYqOpRmmfFwt3C65 nsY5Y8TiTbwSws8FTDDIZnXc3MdaNgrpyZEd/2lwUikLzOKTI6u0UrBCIplj wpUZCHOczmHM2syZDtdaiz3hm2/JISutk8yeJb001FEvebRbCp9osY4MZY11 nzeeCrHWatqcqmmwdtS003xKvTZOaP/1NNtxy3021QxaPXbDZ9Ip9MLEmf1X 3lyP9bOoIG58L0z8wj034wa57dfijUs++ePWXlQzs3nrZvKy2GbuMITuLptb s5sj+PnpuNb9aOSTM145X627PvvalYOrNu252wR77LjrTjvvdcn+O/H82q7w Wi4Xv3Twwvu+fOPNtzU89NVDeXxL1Fufu/TTP789292f9T345V+JPUvamy+5 +OMTxmWeZRetpdhBwf8JcvtA0cQL//37/z8AAyjAARKwgAY8IAITqMAFMrCB DnwgBBm4upXc7n3rM1/+9Oc7PT1sfgPzTcgyuJOJ4KOEJjwhClOowhWysIUu fCEMYyjDGdKwhja8IQ5zeMPEIQd5FwSfCEfIJ9HBq0fZisq29AYic/HkN78p 3XCU+Jcg5iQhEbwiFrOoxS1ysYte/OJP8JI98v2weFRsmb1iRJjAfQox9GGj eQRkKlllDEhIks4Zb6LDPfKxj378IyADKchBmjAnFQRNGYE4Qd/so5GNpAuY BEc/62ALZ2HzWhN3ZsntJMk9eUwkKEMpP5qRUZSz+6TWHPlIh0SSVGGjpJv/ zNZGoMxJZ1tzDipNqcsyHnKXy8tlRVS5j5WhplKdethk4OgjJLallv9xJXOA 6ctpWq+X1NSdNEcizG060iLBimKz7jMu8xxxmeSUyx2llUTL8SWb13xn7qwJ T9eVhZj2vCc+80lMbvITAOpbH8sOtsh5ErSgf7tcKQ3KvIH6BQD83KY3E6o1 5TGIorRKo4TcqdCNQk2eHA0fQ/viUFVKpZur/OdHRRbSlLL0hx5t6UJ56DNh KmaYcUQpTHei0ZzyFEqH/CJQgyrUoRKVfysd0UiHmRmN4LSnN9mpU6NasMEQ sqpWvSpWryrTdiFrIU2VKkugCtaxgnCMRT0rWtOq/9YDhlFxEiWrQLcK17lK DlxZvSte86pXGQrsq3TljFz/Kti1Eaqrg82pXw/rELEqtrF2m8tIA+rYHyZ2 suwJrGUzeyUO0lSzKa2sZxnr2dG+8iRJtSlpFQpazYo2ta5lp5a6+dqCLkqy QfPgQXVyP4K1draj/dNpbevb3NVWVqb1WQiPOtzl2m8unWUuNb+5TmftSEVO FNCw1olJCr7mieosJ2yNo1zokvcmwCVpeX1pTL6tyXNiMlKKmMgSZ2bHvbgc b3rze1wKyla/omxlpja01J6NyjA8sy18N+lE+U4Rv/59MFz4u0oIJxLAQZrk jzBCuPr1sI5v4rC/JqLPEf+TuMQmPjGKU3xPCueLg0rppmFZXL31ZtiWBZaj Hc/D4CZ5uL6xbE5vlyZcGTc3JP0ksvmke0TqGtG62tJwtcCbW1u5N7tSnpCD fTlkJO8kUg/dMpeR9lZTgnl3Wd5lmcPcQyMfWc3Qo97KTGvRR/EsZmfWZZrd PF/TflnPy1ttZoOstDz7eb95anOhfwdoywo6ZIROtK3kTExIK3rM+W00yB5N 6bhs+p2LniymCabpTk+S1NP8tGND/TJTI5fV6rV0elXdr1G7GsS1LiOqGytr ftH61lP2tfVyrdhdtxjYDTV2KIV9WGL3qte+djayeaXswTKbV9Cu9bWjfaVp C7b/2nTWdl2yDe4vwbq83s6SuE2d7nFT6iVrfTe84y3AO5OZ3ca1N/hIuNd9 87vfLMQsPFeMb0MOPN/yPjjC5d1WhZ4WvQU378OD7e+JU3ziH224wyO+Z41z HNkY72/HDR3ykau7zySP38lTTumPo1blt3I5zNVc0kfGOOa2tjnOH5zUda88 5z6X8c5/XmqhE728wS36bZGudNc2nOeFdvrSox7Ko0sd6lK/+gWDfnWrY73r 26N61Lnu9bEXL7hiD/PZya522jm05kJP+9rj7rSK073udqehT+Wu9+1ZMeF+ /zvgEbhwCcF974b33kDYoXh2aBzgrT485GlHEcXv4yf7/1C8CsHt+K9FvvOS Swg78LGPfzSS9C3Xl5treJDBR6jwnn/9GBc/etLbi/VuD0m2E4TJeXEaOYJi PStXn3fYE39toN+HANhBgOUzv/nLB1ryihSoAU20ZdGn2XSE/yTXF7/7CGWH ABrp/PETQDbqGl2dU3N+66LInuZX/3UxM684J2nBpopzd6tPL3JSXzlcMklb bV6ReB8BgszxhR9dDAjv8R8DxtH90QYDLqAEtl98UGDZTOAcYaC4xNEGAo27 NODtEcTgcUuVaB+McF8BpuCesMMArBLvfSAIQqD6QZ8GkkgFPmB31aCAYaAD 6mAMpt8N5h8PRoTtsUUAAt9Uqf+gEmbJ8bVgAuLgBnZVnUWhBUKhAsqgFeof BHZgDHLgFh7GC9LGEPofjjDEEQ7fEqahotSE4nFSBGZhBH5hF1LhHF6hF95h jIUhDgahD3JhdcUhHoohAG6KV5kgraghIrZbCbLDE8LfDEJRB57MgU0LD67f HTrgjtihcOSg+V1hzQ3LBKZLA4rg/wmFIRJeIqaie1BEGAniOakZEprhKbae KtYiydREKw5d4+CfnMxZFWUfosQixdgiMUIOLsLfpMEi3gUjGhajMyIeX2mb AMrJM1ajWVhQyE1jWVkjN+qEvt0dOIZj3Wkj4HSjOeLE/gSeOq6j39FbM50j PI7RN4r/Iz3WI1b9Q2+hYDyqHU30HTv+4/+UEEBy0U/k4z4e5Hv4xEAupFH5 I0NCUEG6470hJEWykkLywpFgJAAIkFL8T0f2z0d+5EM+kEBqpFRoJEdupP+I pEmeZMJFJDkeW0XOpBleJEsS0E2yZEiq5Eg6UEne5ADlJE+C5FAiHEwK4+PR pFLqi00O5U7uJP9kJFFu5FNGpT1NZVH+4086pUp2hVVapUuuZFfyJDFhJRjh o0SGx1KuZT+CZUe+5ViiJFROpVx+5VzC5Vcu5FaeJF7KJVXGpUeS5V+ipF/m JUGiZUyK1FoSoT02pmO2EHE1pVi2JF7OpV0+5WASJlx6pV5a/5FO/qVX9iVQ imRlxuXKeNFRNuNi1mRPtuZAIiXbtCVhXmZgaiZXmmRh3mVmjuRWTqZQ2iYA keZgQiVQHqZBrqZFJt7iuVlihoxsfiZwiuZt5mZmEidgvqZn3qZ1Amdt0mV0 XucWpeb2IWdyUp7lYV4KQVhzGqBkEqVb5qVUwudYSqd8Fuc69qZ7tmR9jiZX zqdw2ucViecJkqeFhN7old6EDQRswpXqMaPkXaRrBl5JEpVwqpWAHiKBehUv yJ5AKBVJFKGjcCB3dQ0W5oxgLKiCzmLjyGaEAt6EBlVYzuZZXSgqZmiMsAPy KR/5NR/0NdNWuNgcyZ/1OQ0womVkpv9ji7ajQyYpWyEmim6jjSrohobfPuwo jzpi/kGiScBMo9QfLxpWutCfKEqissgLbAzZwj2GKTro7LAokxrlkr4pAdEo LUapCG4o8p1eStAhIPohn/ZhiS7RJW7in8phF44QIa6pkT7oPD6moz6q6h2n nTIlC7qgK2piFWapEYliHQYha1QiVgQiH3YpRulRj0qEijIOt1GYpNoEpL4q rFoVczShnm6KBS7gpoKKrgIqJmoLqPrqrRpqJvIEiBYim7rOqqpnWhaZHsmp sz6rAT0psbIh411qdnSqDhaqqIZTshgqoQbroArrL7qRoq4nwSTrg7VqXihn G8acubrqMTL/YqmR6bs8oiVGord+YrTg6vxRoieeqf6UIqoe6+TAjd/sVwf9 Wo3eHP4sKy1VEbVWHumhJwplo7QKUQm64Qv6lD56Y5G+a78YLPx8UKBETccC 1sUqJjpuqOiZnul9qKs16KKe6DFai9ixCy/KjbSeIaMikpnaRifBSphiVOA0 mxDu3ytuztmpa+xRXofW3qmK0ZAE6ig1Uf3Nzc6mqvNkrD5llsyCrFutUYEd 7O6RDY6F4ID2GBLZV4UwbfrgafJZKfNFre8FKd3e7fU9WdxkLcH2BSvGkLIe KWh0KdlcWK6SoMXwmiapCuFej8Nm0sqCn/jJbflh6SQCbHW539WS/ykyPuKn 3uvQ/iDmKo7AkmLf9s6mga2Yia2NSdLeIO4soRuqtC5uYZnqMiu84igCYhi4 6iEmgmsPyqG29iocbqvvjqG0JerAzuzbIESsPm/F3a60ycjYnok5Ccsl2e23 qa0yRYnbklKl2pQeYqqnaurh2uGoGq9F8an68p+Xnqzp6mq5pizExim03m94 Si/rDNE4aWwPmozG3o+lGG2VESrq2Jn+dhnE4qgT8m76SiHOuuIlduqhCpin aiuu5irplqGxMq8xNir0hvBVOangVk1Bwe/3osTkVWufwuH4UuDxUh+v4quQ jiIGC2//JS+5Lm8CJySS4q9P2i+T0umKlv+b2OTsRAHh5Cjx+TyuAq/sIjYi J2oqKP5r8fbrmVqx/EWLvQYrJfZV6abo6e6FmwJxA73osxKxqhrxraXwSbDi 6WzsLsKv334s/a7s/mSkff5mfgLofWYnX2alYQ7yaaaVGmMtG9eaG3sEHNss 27hfhdnxrLanAfGxfPYkflZyUfLnux2yziayqy1yQnJtPsXsMnqw31Kybepm jAYyWLplfHImWmXyKgNmfPaxYMZyjJ4xCfesxfYwwUFxNHIcMG/Ec4ZmdQ4n eLqyadpyMhsyIJcmbVpmflInbcqoBPVym4Iyq4nydCDSzxUzQuWxdurxM7un SyLzJRfyjGanb5r/M3dO5jQ3syzz8rm9MTebmjcbs/OKsD//8wqJMxGqcl+i 8zKDpjV/J7zRckFfMyfP8zUHqDYjaz6T2j6PsxlndIs6sQ+7G3RuJzWD9DnT 5yy7s0FDNDbLaDo38yBn8z0zckV32kUPNAgDtE2/6kR/sEdPJ2diJk/7J3di poWa9H7uZ1Z+pn/msiArkCfvbUynLkcHc7P+sEb/sRk39TVCaFUztRB3UYWe 5Ut39C/fcbjVr7ttNTuicRrndCpTNVoXkFp7USsvNRZhtfFtkMiFV9zsltTM tHI0pSsHkCXH81sv0F42tDxXM2XSdVDZdVCUcWHPaVdvNFsXMTbqtS5W/w8d Q4RfP8QxI9BgU3NkCx5RF9Bgt/QsVzYZa/VoD1Bcv6ljR42SQeIrDXA8He2S EZGmREhnWyQ5y3NPJ7VYJnNSy3I9AzFDA3UtH/V1luV7RlBsT2tN3zR135Bq IzLrMm7RXOvv0Nfagg4CkzU6mXU0KzNKI3VdFqZCpzS0HrZ5J/RDw/c5k+R1 ywW6zlVYfzPrui6OYTZhLe7N2HZGRbXUwutvG7Q6hzRC66duLrZGJ7eDk3Ri S7NfHrdLEzhGF1p+8/N+Q1OxKOwjz+6HjSxvY/iaTfVOv3NtKjhuUvh2ojWE /6Zoz6aL76ZE59J9w9WGZ/h3h8qHo63ceHf3Ov+uQJswipc2fUq4QpO0kuNv jLP0jKP3evtxk+L498Auw65a0vHKjtO0z4ITkwnqZncYeFvZAcNIb1vIgRf1 cgM3UDe4fj44kiu3Twdnf8KyWUJ3fXvPZRtO7+1iwxZ5u/U5XKGwiRu5gZ91 a7/kZG/RV4P1oXs2/y6YAO/YqnkpFGmXf99JpOsKGyMxmpUqlaR5Tbr1oi90 o2PRXDf2nmd1hx9Ojv0391YM1fpFl/81oeMbqWuoqZ/6Wr02bLe6+3w59vb3 mCdMxAQtJ20SkHV6hOT4pTl7k+Cxovt6vAH7EAv7Y1Nv4UAZiG+v2Y547e7F rUt6rtvbrqtRP1c3uz//prZrUHZ/yNkee/Z2u49JUYMJuqefO7ul+57w+8hZ +ft0CNUWbUcZWKZfWbPr+7M/NaX5+50C/FhPssRrGZGLd8g6PKRBvJRWPDFL O6+DM+eIetmRvO1ifNiK/MNxPFMSOuIWiqWjCaBvOZeDvLpruM17jMYnGstX yZV/e2ltutAPWnIxfKmrPJeVu28j/cD1/DdROnbZUbaAua0OvbXhdsJ/TroJ PNMTmdKredeje85HGoqPzXv1h5AwRuxyd5CL+L274clTfNiz2Ncf/cuR7Iga rdWjoNNPury3F3mo/RR/uNWDu9QzrrLfl9GHPM4vPsC8VaQg+rc9VhM7PsqV /72Iv27g+w0YEpish7vZjzu5j33Hzz2rkr7cp73SGgt/lAgVv4u8IMi4ALn9 uP7lakjsLzva2zrq//mraE71Ja52uH7XMNPcCDmtFz7T9D60j1XdMz7fHNMF Jm3028yH9G85+q8k/b0Ypg6t9f3Al0jBi2i8SH1tx7yjIfx3nfnCo/zberx+ Pf/N7wfOVBKYFo79/e8Meojnh6i8AwSAfwAIEvw3UODBhAgNJnQ48CDEiBMp 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 JugU9zEdHasfPekfs44Ys4sT69H46HDOfpDj+Ci2pvEyOo4Qw48LFXJNgmlB eAWzXKrBbG8Ip64j9zDOLDJJthEhM5EkNY4hKZIIi2lNwmmc1LGuhusg709a IJJ9ClJF3PEkFY8DD/AdL8d7ILAxJrFWNBAoRmcZU9HBHJENE5ImeXI25DFe kPIlrVIVdbIOpbInS+UnQfEbP03zVhAkG8s2zK6OXKxgTgjcKjIqGbIree8e r6cm49JlvrLCzPCg/45R6W6EKqEuL5csQjgJNE4JKpHFJNuvGzeRK+3yQ/Dy HM9sLJ0SEmUyNrJNMBlNDqkw/VJy3BrTMbHQM5EPNENz+eYyPxJRL1/NOYLL hshO//Rx8FAx0TiTGo8lMblvMbXxJnjBN38TOINTOIeTOIvTOI8TOZNTOZeT OZvTOZ8TOp8TMlvxF1nzwAZy7B4OK+VC4WrHF2kIl6zQ/oBRKw2yNE2TPFFT 3zQCH9rTPd8TPuNTPueTPuvTPu8TP/NTP/eTP/vTP/8TQNXz3+qS/HCyRoKw M98SPXdEQHFjI6ITQiNUQieUQivUQi+UOEcTBAvr+qgPUQyTVNKDaXazLf/O c0ExgkRRAkBXlEVb1EVfFEZjVEbts54I9OJSlDdN9ETLqUF3dNdy07xw1Ed6 E0OL1EiPFEmTNDrL00c3C0itS0hVlD1nlEqr1EqvFEtZtEebtMqeVLmiVNqU VEzHlEzL1Eg1lEtDz0uLC0zzI0vfFE7jVE6tNE1Pck1/q03rVE/3lAxtlN/y lE8DVVBTU0d/D1AHFVETNUz8dN0OVVEfVVDvdLccFVIrtU7pzzY9ziUdMikl Usq21FJDVVT7FPyEEP+A0DLpy1NHclRb1VXfzp8QcNjgUeYWEOeGErbQrQKb qSOPjVCY9FWDFVLLkOnMMrEic7GQNVUX7BGd8K3/2A1UhVVapRUJFQse10rt BG10+NInKlFziJIwfTJap5VcW5VYk7DYlANKvLUGu4hduSsm1xFNy5Ve6xWB wHLy+jDF1LWkrDNSMoWQmvXy2hIb59VeD7ZeUe0Wd3HYGHbW/nX1YnC7jtIB FwcZeQ1YEVZj7VJSbYtSNxZkSU6QJMzldu1jQxZlf5RRqe1kU9ZlP6xjQatl X5ZmzStmN2tma1Znd+tmBStndxZo+6pn++png9ZoOWpow6poj5ZpXSlpuWpp m1ZqgehpfypqpxZrwWYnzJRru9ZrmzNjs1Zs18sk5tRszxZt/XNcx5Zt1+1B vxZu41ZugdNg29Zufy9tPfNWb/d2Pu/Wb/8WcANXcAeXcAvXcA8XcRNXcReX cRvXcR8XciNXcieXcivXci8XczNXczeXczvXc38iIAAAOw== --------------040606070305090304040806--