{"id":10463,"date":"2020-10-15T07:41:15","date_gmt":"2020-10-14T22:41:15","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=10463"},"modified":"2022-01-21T14:15:05","modified_gmt":"2022-01-21T05:15:05","slug":"decorator-%ed%8c%a8%ed%84%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=10463","title":{"rendered":"[GoF] Decorator \ud328\ud134"},"content":{"rendered":"<h4>\ud328\ud134\uba85\uce6d<\/h4>\n<p>Decorator<\/p>\n<h4>\ud544\uc694\ud55c \uc0c1\ud669<\/h4>\n<p>\uc5b4\ub5a4 \uae30\ub2a5\uc744 \uae30\uc900\uc73c\ub85c \ub2e4\ub978 \uc5ec\ub7ec\uac00\uc9c0 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\ub4e4\uc744 \ud6a8\uacfc\uc801\uc73c\ub85c \ucd94\uac00\ud560 \uc218 \uc788\ub294 \ud328\ud134\uc774\ub2e4.<\/p>\n<h4>\uc608\uc81c \ucf54\ub4dc <\/h4>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/decorator.png\" alt=\"\" width=\"800\"  class=\"aligncenter size-full wp-image-10464\" \/><\/p>\n<p>Item\uc740 \uae30\uc900\uc774 \ub418\ub294 \uae30\ub2a5\uacfc \uc7a5\uc2dd\ucc98\ub7fc \ucd94\uac00\ud560 \uc218 \uc788\ub294 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc744 \ub3d9\uc77c\ud55c \uac1c\ub150\uc73c\ub85c \uac04\uc8fc\ud558\uae30 \uc704\ud55c \ud074\ub798\uc2a4\uc774\ub2e4. StringItem\uacfc MultiStringItem\uc774 \uae30\uc900\uc774 \ub418\ub294 \uae30\ub2a5\uc774\uace0, Decorator\uac00 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc774\ub2e4. \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc740 \uc774 Decorator\ub97c \uc0c1\uc18d\ubc1b\uc544 \ud6a8\uc728\uc801\uc73c\ub85c \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. \uba3c\uc800 Item \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic abstract class Item {\r\n\tpublic abstract int getHeight();\r\n\tpublic abstract int getMaxWidth() throws UnsupportedEncodingException;\r\n\tpublic abstract int getWidth(int index) throws UnsupportedEncodingException;\r\n\tpublic abstract String getContent(int index) throws UnsupportedEncodingException;\r\n\t\r\n\tpublic void print() throws UnsupportedEncodingException {\r\n\t\tint height = getHeight();\r\n\t\tfor(int i=0; i&lt;height; i++) {\r\n\t\t\tString content = getContent(i);\r\n\t\t\tSystem.out.println(content);\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>\uae30\uc900\uc774 \ub418\ub294 \uae30\ubcf8 \uae30\ub2a5\uc778 StringItem\uc740 \ud558\ub098\uc758 \ubb38\uc790\uc5f4\uc744 \ucc98\ub9ac\ud558\uba70 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class StringItem extends Item {\r\n\tprivate String content;\r\n\t\r\n\tpublic StringItem(String content) {\r\n\t\tthis.content = content;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic int getHeight() {\r\n\t\treturn 1;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getMaxWidth() throws UnsupportedEncodingException {\r\n\t\treturn content.getBytes(\"euc-kr\").length;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String getContent(int index) {\r\n\t\treturn content;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getWidth(int index) throws UnsupportedEncodingException {\r\n\t\treturn getMaxWidth();\r\n\t}\r\n}\r\n<\/pre>\n<p>\ub9c8\ucc2c\uac00\uc9c0\ub85c \uae30\ubcf8\uc774 \ub418\ub294 \uae30\ub2a5\uc778 MultiStringItem\uc740 StringItem\uc744 \uc5ec\ub7ec\uac1c \uac00\uc9c8 \uc218 \uc788\uc5b4\uc11c \uc5ec\ub7ec\uac1c\uc758 \ubb38\uc790\uc5f4\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uc73c\uba70 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\nimport java.util.ArrayList;\r\nimport java.util.Iterator;\r\n\r\npublic class MultiStringItem extends Item {\r\n\tprivate ArrayList&lt;StringItem> strings = new ArrayList&lt;StringItem>();\r\n\t\r\n\tpublic MultiStringItem() {}\r\n\t\r\n\t@Override\r\n\tpublic int getHeight() {\r\n\t\treturn strings.size();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getMaxWidth() throws UnsupportedEncodingException {\r\n\t\tIterator&lt;StringItem> iter = strings.iterator();\r\n\t\tint maxWidth = 0;\r\n\t\t\r\n\t\twhile(iter.hasNext()) {\r\n\t\t\tItem stringItem = iter.next();\r\n\t\t\tint width = stringItem.getMaxWidth();\r\n\t\t\t\r\n\t\t\tif(width > maxWidth) maxWidth = width;\r\n\t\t}\r\n\t\t\r\n\t\treturn maxWidth;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String getContent(int index) throws UnsupportedEncodingException {\r\n\t\tStringItem item = strings.get(index);\r\n\t\treturn item.getContent(index);\r\n\t}\r\n\t\r\n\tpublic void addItem(StringItem item) {\r\n\t\tstrings.add(item);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getWidth(int index) throws UnsupportedEncodingException {\r\n\t\treturn strings.get(index).getMaxWidth();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uae30\ubcf8 \uae30\ub2a5\uc5d0 \uc7a5\uc2dd\ucc98\ub7fc \ub610 \ub2e4\ub978 \uae30\ub2a5\uc744 \uc704\ud55c Decorator \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\npublic abstract class Decorator extends Item {\r\n\tprotected Item item;\r\n\tpublic Decorator(Item item) {\r\n\t\tthis.item = item;\r\n\t}\r\n}\r\n<\/pre>\n<p>Decorator\uc758 item \ud544\ub4dc\uac00 \uc7a5\uc2dd\ud560 \ub300\uc0c1\uc774 \ub418\ub294 \uac1d\uccb4\uc774\ub2e4. \uc989 Decorator\ub294 \uae30\ubcf8 \uae30\ub2a5 \ubfd0\ub9cc \uc544\ub2c8\ub77c Decorator\uc5d0 \ub300\ud55c \ubcf4\uc870 \uae30\ub2a5\ub3c4 \uc7a5\uc2dd\ud560 \uc218 \uc788\ub2e4. \uc774\uc81c \uc774 Decorator\uc5d0 \ub300\ud55c \uad6c\uccb4\uc801\uc778 \ud30c\uc0dd \ud074\ub798\uc2a4\ub4e4\uc744 \ubcf4\uc790. \uba3c\uc800 SideDecorator\uc774\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class SideDecorator extends Decorator {\r\n\tprivate Character ch;\r\n\t\r\n\tpublic SideDecorator(Item item, Character ch) {\r\n\t\tsuper(item);\r\n\t\tthis.ch = ch;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getMaxWidth() throws UnsupportedEncodingException {\r\n\t\treturn item.getMaxWidth() + 2;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String getContent(int index) throws UnsupportedEncodingException {\r\n\t\treturn ch + item.getContent(index) + ch;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getHeight() {\r\n\t\treturn item.getHeight();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getWidth(int index) throws UnsupportedEncodingException {\r\n\t\treturn item.getWidth(index) + 2;\r\n\t}\r\n}\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 LineNumberDecorator\uc774\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class LineNumberDecorator extends Decorator {\r\n\r\n\tpublic LineNumberDecorator(Item item) {\r\n\t\tsuper(item);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getHeight() {\r\n\t\treturn item.getHeight();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getMaxWidth() throws UnsupportedEncodingException {\r\n\t\treturn item.getMaxWidth() + 4;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getWidth(int index) throws UnsupportedEncodingException {\r\n\t\treturn item.getWidth(index) + 4;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String getContent(int index) throws UnsupportedEncodingException {\r\n\t\treturn String.format(\"%02d\", index) + \": \" + item.getContent(index);\r\n\t}\r\n}\r\n<\/pre>\n<p>BoxDecorator\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class BoxDecorator extends Decorator {\r\n\tpublic BoxDecorator(Item item) {\r\n\t\tsuper(item);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getHeight() {\r\n\t\treturn item.getHeight()+2;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getMaxWidth() throws UnsupportedEncodingException {\r\n\t\treturn item.getMaxWidth() + 2;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getWidth(int index) throws UnsupportedEncodingException {\r\n\t\treturn item.getWidth(index) + 2;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String getContent(int index) throws UnsupportedEncodingException {\r\n\t\tint maxWidth = this.getMaxWidth();\r\n\t\tif(index == 0 || index == getHeight()-1) {\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\tsb.append('+');\r\n\t\t\tfor(int i=0; i&lt;maxWidth-2; i++) {\r\n\t\t\t\tsb.append('-');\r\n\t\t\t}\r\n\t\t\tsb.append('+');\r\n\t\t\treturn sb.toString();\r\n\t\t} else {\r\n\t\t\treturn '|' + item.getContent(index-1) + makeTailString(maxWidth - getWidth(index-1));\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate String makeTailString(int count) {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\tfor(int i=0; i&lt;count; i++) {\r\n\t\t\tsb.append(' ');\r\n\t\t}\r\n\t\tsb.append('|');\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class Main {\r\n\tpublic static void main(String[] args) throws UnsupportedEncodingException {\r\n\t\tStringItem item1 = new StringItem(\"\uc548\ub155\ud558\uc2ed\ub2c8\uae4c?\");\r\n\t\tStringItem item2 = new StringItem(\"\uc81c \uc774\ub984\uc740 \uae40\ud615\uc900\uc785\ub2c8\ub2e4.\");\r\n\t\tStringItem item3 = new StringItem(\"\ubc18\uac11\uc2b5\ub2c8\ub2e4.\");\r\n\t\tStringItem item4 = new StringItem(\"\ub514\uc790\uc778\ud328\ud134\uc758 \uc138\uacc4\uc5d0 \ud479 \ube60\uc838\ubcf4\uc2dc\uc8e0.\");\r\n\r\n\t\tMultiStringItem multiStringItem = new MultiStringItem();\r\n\t\tmultiStringItem.addItem(item1);\r\n\t\tmultiStringItem.addItem(item2);\r\n\t\tmultiStringItem.addItem(item3);\r\n\t\tmultiStringItem.addItem(item4);\r\n\r\n\t\tDecorator sideDecorator = new SideDecorator(multiStringItem, '\\\"');\r\n\t\tDecorator lineNumberDecorator = new LineNumberDecorator(sideDecorator);\r\n\t\tDecorator boxDecorator = new BoxDecorator(lineNumberDecorator);\r\n\t\t\t\t\t\t\r\n\t\tboxDecorator.print();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uae30\ubcf8 \uae30\ub2a5\uc778 multiStringItem\uc5d0 3\uac1c\uc758 \uc7a5\uc2dd\uc778 sideDecorator, lineNumberDecorator, boxDecorator\uc744 \uc801\uc6a9\ud55c \uc608\ub85c \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/decorator_result1.png\" alt=\"\" width=\"800\" \n class=\"aligncenter size-full wp-image-10466\" \/><\/p>\n<p>\ub2e4\uc74c\uc740 \uae30\ubcf8 \uae30\ub2a5\uc778 multiStringItem\uc740 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uace0 3\uac1c\uc758 \uc7a5\uc2dd\uc758 \uc21c\uc11c\ub97c \ub2ec\ub9ac\ud55c \uc608\uc774\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\n\r\npublic class Main {\r\n\tpublic static void main(String[] args) throws UnsupportedEncodingException {\r\n\t\tStringItem item1 = new StringItem(\"\uc548\ub155\ud558\uc2ed\ub2c8\uae4c?\");\r\n\t\tStringItem item2 = new StringItem(\"\uc81c \uc774\ub984\uc740 \uae40\ud615\uc900\uc785\ub2c8\ub2e4.\");\r\n\t\tStringItem item3 = new StringItem(\"\ubc18\uac11\uc2b5\ub2c8\ub2e4.\");\r\n\t\tStringItem item4 = new StringItem(\"\ub514\uc790\uc778\ud328\ud134\uc758 \uc138\uacc4\uc5d0 \ud479 \ube60\uc838\ubcf4\uc2dc\uc8e0.\");\r\n\r\n\t\tMultiStringItem multiStringItem = new MultiStringItem();\r\n\t\tmultiStringItem.addItem(item1);\r\n\t\tmultiStringItem.addItem(item2);\r\n\t\tmultiStringItem.addItem(item3);\r\n\t\tmultiStringItem.addItem(item4);\r\n\r\n\t\tDecorator boxDecorator = new BoxDecorator(multiStringItem);\r\n\t\tDecorator lineNumberDecorator = new LineNumberDecorator(boxDecorator);\t\t\r\n\t\tDecorator sideDecorator = new SideDecorator(lineNumberDecorator, '\\\"');\r\n\t\t\r\n\t\tsideDecorator.print();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/decorator_result2.png\" alt=\"\" width=\"800\" class=\"aligncenter size-full wp-image-10468\" \/><\/p>\n<div style='background:#efefef;border-radius:8px;padding:12px 24px'>\uc774 \uae00\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc124\uacc4\uc758 \uae30\ubc18\uc774 \ub418\ub294 GoF\uc758 \ub514\uc790\uc778\ud328\ud134\uc5d0 \ub300\ud55c \uac15\uc758\uc790\ub8cc\uc785\ub2c8\ub2e4. \uc644\uc804\ud55c \uc2e4\uc2b5\uc744 \uc704\ud574 \uc774 \uae00\uc5d0\uc11c \uc18c\uac1c\ud558\ub294 \ud074\ub798\uc2a4 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uacfc \uc608\uc81c \ucf54\ub4dc\ub294 \uc644\uc804\ud558\uac8c \uc2e4\ud589\ub418\ub3c4\ub85d \uc81c\uacf5\ub418\uc9c0\ub9cc, \uc0c1\ub300\uc801\uc73c\ub85c \uc608\uc81c \ucf54\ub4dc\uc640 \uad00\ub828\ub41c \uc124\uba85\uc774 \ud568\ucd95\uc801\uc73c\ub85c \uc81c\uacf5\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0 \ub300\ud574 \uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uba74 \ub313\uae00\uc744 \ud1b5\ud574 \ub0a8\uaca8\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud328\ud134\uba85\uce6d Decorator \ud544\uc694\ud55c \uc0c1\ud669 \uc5b4\ub5a4 \uae30\ub2a5\uc744 \uae30\uc900\uc73c\ub85c \ub2e4\ub978 \uc5ec\ub7ec\uac00\uc9c0 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\ub4e4\uc744 \ud6a8\uacfc\uc801\uc73c\ub85c \ucd94\uac00\ud560 \uc218 \uc788\ub294 \ud328\ud134\uc774\ub2e4. \uc608\uc81c \ucf54\ub4dc Item\uc740 \uae30\uc900\uc774 \ub418\ub294 \uae30\ub2a5\uacfc \uc7a5\uc2dd\ucc98\ub7fc \ucd94\uac00\ud560 \uc218 \uc788\ub294 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc744 \ub3d9\uc77c\ud55c \uac1c\ub150\uc73c\ub85c \uac04\uc8fc\ud558\uae30 \uc704\ud55c \ud074\ub798\uc2a4\uc774\ub2e4. StringItem\uacfc MultiStringItem\uc774 \uae30\uc900\uc774 \ub418\ub294 \uae30\ub2a5\uc774\uace0, Decorator\uac00 \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc774\ub2e4. \uc885\uc18d\uc801\uc778 \uae30\ub2a5\uc740 \uc774 Decorator\ub97c \uc0c1\uc18d\ubc1b\uc544 \ud6a8\uc728\uc801\uc73c\ub85c \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. \uba3c\uc800 Item \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=10463\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[GoF] Decorator \ud328\ud134&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-10463","post","type-post","status-publish","format-standard","hentry","category-design"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10463"}],"version-history":[{"count":8,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10463\/revisions"}],"predecessor-version":[{"id":11950,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10463\/revisions\/11950"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10463"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}