What's the current status of using ZEO 2 with Zope 2.6? I know that last month folks were saying use 2.6 with the ZEO from CVS, but I notice we have a ZEO 2.01b on the download site and 2.6b1 is, of course, out there. Do these fellers play nice together? And do we still have to compile the Zope as an unprivileged user like the posts were saying last month?
Apparently Zope 2.6b1 requires ZEO 2.01b. You should always compile and run Zope as an unprivileged user, especially if you don't need to bind to "low" ports. Effective user support is not good in Zope currently and it's easier all around to do this. On Mon, 2002-12-16 at 22:13, Chris Muldrow wrote:
What's the current status of using ZEO 2 with Zope 2.6? I know that last month folks were saying use 2.6 with the ZEO from CVS, but I notice we have a ZEO 2.01b on the download site and 2.6b1 is, of course, out there. Do these fellers play nice together? And do we still have to compile the Zope as an unprivileged user like the posts were saying last month?
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
We just started getting this in ZSQL methods when clicking on the Advanced Tab in the ZMI. Zope has encountered an error while publishing this resource. Error Type: Could not load oid 3Á, pickled data in traceback info may contain clues Error Value: None <p>Traceback (innermost last): <ul> <li> Module ZPublisher.Publish, line 98, in publish</li> <li> Module ZPublisher.mapply, line 88, in mapply</li> <li> Module ZPublisher.Publish, line 39, in call_object</li> <li> Module Shared.DC.Scripts.Bindings, line 252, in __call__</li> <li> Module Shared.DC.Scripts.Bindings, line 283, in _bindAndExec</li> <li> Module App.special_dtml, line 174, in _exec</li> <li> Module Shared.DC.ZRDB.DA, line 476, in manage_product_zclass_info</li> <li> Module ZODB.Connection, line 533, in setstate</li> <li> Module ZODB.Connection, line 192, in _persistent_load<br /> __traceback_info__: 3Á</li> <li> Module ZODB.Connection, line 131, in __getitem__<br /> __traceback_info__: ('\x00\x00\x00\x00\x00\x1d3\xc1', '(cExtensionClass\nExtensionClass\nq\x01(U\nQPageClassq\x02(cZClasses.ZClass \nPersistentClass\nq\x03cZClasses.ObjectManager\nObjectManager\nq\x04cOFS.Si mpleItem\nSimpleItem\nq\x05tq\x06}q\x07(U\n_p_changedq\x08K\x01U\x14isPrinci piaFolderishq\tU\x01YU\x11default_next_pageq\nU\x00U\x06_p_oidq\x0bU\x08\x00 \x00\x00\x00\x00\x00/\xcbq\x0cU\tmeta_typeq\rU\x05QPageq\x0eU\ndtmldocseqq\x 0f(U\x08\x00\x00\x00\x00\x00\x1d5.q\x10(U\x0fZClasses.Methodq\x11U\x03MWpq\x 12tq\x13tq\x14QU\x0epropertysheetsq\x15U\x08\x00\x00\x00\x00\x00\x1d5/q\x16Q U\nindex_htmlq\x17(U\x08\x00\x00\x00\x00\x00\x1d50q\x18(h\x11U\x03MWpq\x19tq \x1atq\x1bQU\x08pagelistq\x1c(U\x08\x00\x00\x00\x00\x00\x1d51q\x1d(h\x11U\x0 3MWpq\x1etq\x1ftq QU\x12__ac_permissions__q!)U\x07__doc__q"U\x0ePage organizerq#U\x0ecountableitemsq$(U\x08\x00\x00\x00\x00\x00\x1d52q%(h\x11U\x0 3MWpq&tq\'tq(QU\rdtmldocseqoldq)(U\x08\x00\x00\x00\x00\x00\x1d5-q*(h\x11 U\x03MWpq+tq,tq-QU\x04iconq.U\x00U\t_p_serialq/U\x08\x03Cv\xaa\xf5\xe7\xf3\x 99q0U\x14_v_manage_path_rolesq1U\x12QSurvey/QPageClassq2U\rMessageDialogq3(U \x08\x00\x00\x00\x00\x00\x1d53q4(h\x11U\x03MWpq5tq6tq7QU\x12manage_changeOrd erq8(U\x08\x00\x00\x00\x00\x00\x1d54q9(h\x11U\x03MWpq:tq;tq<QU\x05DEBUGq= (U\x08\x00\x00\x00\x00\x00\x1d55q>(h\x11U\x03MWpq?tq@tqAQU\nmeta_typesqB( }qC(U\npermissionqDU\x11Add TextQuestionsqEU\x04nameqFU\x0cTextQuestionqGU\x07productqHU\x07QSurveyqIU\x 06actionqJU3manage_addProduct/QSurvey/TextQuestionClass_factoryqKu}qL(hDU\x1 bAdd MultipleChoiceQuestionsqMhFU\x16MultipleChoiceQuestionqNhHhIhJU=manage_addPr oduct/QSurvey/MultipleChoiceQuestionClass_factoryqOu}qP(U\nvisibilityqQU\x06 GlobalqRU\ninterfacesqS]qT(cInterface.iclass\nInterface\nqUoqV}qW(U\x11_Inte rface__attrsqX}qY(U\nwl_getLockqZ(cInterface.Method\nMethod\nq[o}q\\(U\x07__ doc__q]U6 Returns the locktoken identified by the locktokenuri q^U\x08optionalq_}q`U\x08requiredqa(U\tlocktokenqbtqcU\x08__name__qdU\nwl_ge tLockqeU\tinterfaceqfU\x12WriteLockInterfaceqgU\x07varargsqhNU\x06kwargsqiNU \npositionalqj(hbtqkubU\rwl_lockValuesql(h[o}qm(h]U_ Returns a sequence of locks. if \'killinvalids\' is true,\n invalid locks will be deletedqnh_}qoU\x0ckillinvalidsqpK\x00sha)hdU\rwl_lockValuesqqhfhghhNhiNhj(h ptqrubU\rwl_lockTokensqs(h[o}qt(h]Ue Returns a sequence of lock tokens. if \'killinvalids\' is true,\n invalid locks will be deletedquh_}qvhpK\x00sha)hdU\rwl_lockTokensqwhfhghhNhiNhj(hptqxubU\nwl_hasLo ckqy(h[o}qz(h]UU Returns true if the lock identified by the token is attached\n to the object. q{h_}q|hpK\x00sha(U\x05tokenq}tq~hdU\nwl_hasLockq\x7fhfhghhNhiNhj(h}hptq\x80 ubU\x0bwl_isLockedq\x81(h[o}q\x82(h]Uh Returns true if \'self\' is locked at all. If invalid locks\n still exist, they should be deleted.q\x83h_}q\x84ha)hdU\x0bwl_isLockedq\x85hfhghhNhiNhj)ubU\nwl_setLockq \x86(h[o}q\x87(h]U\xef Store the LockItem, \'lock\'. The locktoken will be used to fetch\n and delete the lock. If the lock exists, this MUST\n overwrite it if all of the values except for the \'timeout\' on the\n old and new lock are the same. q\x88h_}q\x89ha(hbU\x04lockq\x8atq\x8bhdU\nwl_setLockq\x8chfhghhNhiNhj(hbh\x 8atq\x8dubU\rwl_clearLocksq\x8e(h[o}q\x8f(h]Uc Deletes ALL DAV locks on the object - should only be called\n by lock management machinery. q\x90h_}q\x91ha)hdU\rwl_clearLocksq\x92hfhghhNhiNhj)ubU\x0cwl_lockItemsq\x93 (h[o}q\x94(h]U\xa1 Returns (key, value) pairs of locktoken, lock.\n\n if \'killinvalids\' is true, invalid locks (locks whose timeout\n has been exceeded) will be deletedq\x95h_}q\x96hpK\x00sha)hdU\x0cwl_lockItemsq\x97hfhghhNhiNhj(hptq\x98 ubU\nwl_delLockq\x99(h[o}q\x9a(h]U6 Deletes the locktoken identified by the locktokenuri q\x9bh_}q\x9cha(hbtq\x9dhdU\nwl_delLockq\x9ehfhghhNhiNhj(hbtq\x9fubuh]T\xd6\ x03\x00\x00 This represents the basic protocol needed to support the write lock\n machinery.\n\n It must be able to answer the questions:\n\n o Is the object locked?\n\n o Is the lock owned by the current user?\n\n o What lock tokens are associated with the current object?\n\n o What is their state (how long until they\'re supposed to time out?,\n what is their depth? what type are they?\n\n And it must be able to do the following:\n\n o Grant a write lock on the object to a specified user.\n\n - *If lock depth is infinite, this must also grant locks on **all**\n subobjects, or fail altogether*\n\n o Revoke a lock on the object.\n\n - *If lock depth is infinite, this must also revoke locks on all\n subobjects*\n\n **All methods in the WriteLock interface that deal with checking valid\n locks MUST check the timeout values on the lockitem (ie, by calling\n \'lockitem.isValid()\'), and DELETE the lock if it is no longer valid**\n\n q\xa0U\t__bases__q\xa1((hUoq\xa2}q\xa3(hX}q\xa4h]U\x00h\xa1)hdU\tInterfaceq\ xa5ubtq\xa6hdhgubaU\x06actionq\xa7U"manage_addProduct/OFSP/documentAddq\xa8U \npermissionq\xa9U Add Documents, Images, and Filesq\xaaU\x04nameq\xabU\rDTML Documentq\xacU\x07productq\xadU\x04OFSPq\xaeU\x08instanceq\xafcOFS.DTMLDocum ent\nDTMLDocument\nq\xb0u}q\xb1(hQhRhS]q\xb2hVah\xa7U\x1fmanage_addProduct/O FSP/imageAddq\xb3h\xa9h\xaah\xabU\x05Imageq\xb4h\xadh\xaeh\xafcOFS.Image\nIm age\nq\xb5u}q\xb6(hQhRhS]q\xb7hVah\xa7U+manage_addProduct/PythonScripts/pySc riptAddq\xb8h\xa9U\x12Add Python Scriptsq\xb9h\xabU\x0fScript (Python)q\xbah\xadU\rPythonScriptsq\xbbh\xafcProducts.PythonScripts.PythonSc ript\nPythonScript\nq\xbcutq\xbdU\x0corder_manageq\xbe(U\x08\x00\x00\x00\x00 \x00\x1d5;q\xbf(h\x11U\x03MWpq\xc0tq\xc1tq\xc2QU\x16copy_of_countableitemsq\ xc3(U\x08\x00\x00\x00\x00\x00\x1d56q\xc4(h\x11U\x03MWpq\xc5tq\xc6tq\xc7QU\x0 fbranch_questionq\xc8U\x00U\nsubmittextq\xc9U\x19Continue to next questionq\xcaU\x0emanage_optionsq\xcb(}q\xcc(U\x05labelq\xcdU\x08Contentsq\x ceU\x06actionq\xcfU\x0bmanage_mainq\xd0u}q\xd1(h\xcdU\x04Viewq\xd2h\xcfU\nin dex_htmlq\xd3u}q\xd4(U\x05labelq\xd5U\nTransitionq\xd6U\x06actionq\xd7U\x11t ransition_manageq\xd8u}q\xd9(h\xd5U\x11Sub-item_Sequenceq\xdah\xd7U\x0corder _manageq\xdbu}q\xdc(U\x05labelq\xddU\x0bButton_Textq\xdeU\x06actionq\xdfU%pr opertysheets/text_for_button/manageq\xe0u}q\xe1(U\x05labelq\xe2U\x04freqq\xe 3U\x06actionq\xe4U\x0bfrequenciesq\xe5utq\xe6U\x0bfrequenciesq\xe7(U\x08\x00 \x00\x00\x00\x00\x1d58q\xe8(h\x11U\x03MWpq\xe9tq\xeatq\xebQU\x13copy_of_freq uenciesq\xec(U\x08\x00\x00\x00\x00\x00\x1d57q\xed(h\x11U\x03MWpq\xeetq\xeftq \xf0QU\x11transition_manageq\xf1(U\x08\x00\x00\x00\x00\x00\x1d59q\xf2(h\x11U \x03MWpq\xf3tq\xf4tq\xf5QU\x17manage_changeTransitionq\xf6(U\x08\x00\x00\x00 \x00\x00\x1d5:q\xf7(h\x11U\x03MWpq\xf8tq\xf9tq\xfaQU\n__module__q\xfbU\x19*E LIY0U9FYpg1J7Ri7r2f5w==q\xfcutq\xfdt.N.')</li> </ul>Could not load oid 3Á, pickled data in traceback info may contain clues </p> -->
Hmm. I recognize my pretty-old ZClass Product, QSurvey, near the beginning of the traceback. What version of Zope are you using? There have been problems with some ZClass products, including that one, on upgrade to Zope-2.6.0. As a shot in the dark, have you by chance recently upgraded? -- Jim Washington Allen Schmidt wrote:
We just started getting this in ZSQL methods when clicking on the Advanced Tab in the ZMI.
Zope has encountered an error while publishing this resource.
Error Type: Could not load oid 3Á, pickled data in traceback info may contain clues Error Value: None
<p>Traceback (innermost last): <ul>
<li> Module ZPublisher.Publish, line 98, in publish</li>
<li> Module ZPublisher.mapply, line 88, in mapply</li>
<li> Module ZPublisher.Publish, line 39, in call_object</li>
<li> Module Shared.DC.Scripts.Bindings, line 252, in __call__</li>
<li> Module Shared.DC.Scripts.Bindings, line 283, in _bindAndExec</li>
<li> Module App.special_dtml, line 174, in _exec</li>
<li> Module Shared.DC.ZRDB.DA, line 476, in manage_product_zclass_info</li>
<li> Module ZODB.Connection, line 533, in setstate</li>
<li> Module ZODB.Connection, line 192, in _persistent_load<br /> __traceback_info__: 3Á</li>
<li> Module ZODB.Connection, line 131, in __getitem__<br /> __traceback_info__: ('\x00\x00\x00\x00\x00\x1d3\xc1', '(cExtensionClass\nExtensionClass\nq\x01(U\nQPageClassq\x02(cZClasses.ZClass \nPersistentClass\nq\x03cZClasses.ObjectManager\nObjectManager\nq\x04cOFS.Si mpleItem\nSimpleItem\nq\x05tq\x06}q\x07(U\n_p_changedq\x08K\x01U\x14isPrinci piaFolderishq\tU\x01YU\x11default_next_pageq\nU\x00U\x06_p_oidq\x0bU\x08\x00 \x00\x00\x00\x00\x00/\xcbq\x0cU\tmeta_typeq\rU\x05QPageq\x0eU\ndtmldocseqq\x 0f(U\x08\x00\x00\x00\x00\x00\x1d5.q\x10(U\x0fZClasses.Methodq\x11U\x03MWpq\x 12tq\x13tq\x14QU\x0epropertysheetsq\x15U\x08\x00\x00\x00\x00\x00\x1d5/q\x16Q U\nindex_htmlq\x17(U\x08\x00\x00\x00\x00\x00\x1d50q\x18(h\x11U\x03MWpq\x19tq \x1atq\x1bQU\x08pagelistq\x1c(U\x08\x00\x00\x00\x00\x00\x1d51q\x1d(h\x11U\x0 3MWpq\x1etq\x1ftq QU\x12__ac_permissions__q!)U\x07__doc__q"U\x0ePage organizerq#U\x0ecountableitemsq$(U\x08\x00\x00\x00\x00\x00\x1d52q%(h\x11U\x0 3MWpq&tq\'tq(QU\rdtmldocseqoldq)(U\x08\x00\x00\x00\x00\x00\x1d5-q*(h\x11 U\x03MWpq+tq,tq-QU\x04iconq.U\x00U\t_p_serialq/U\x08\x03Cv\xaa\xf5\xe7\xf3\x 99q0U\x14_v_manage_path_rolesq1U\x12QSurvey/QPageClassq2U\rMessageDialogq3(U \x08\x00\x00\x00\x00\x00\x1d53q4(h\x11U\x03MWpq5tq6tq7QU\x12manage_changeOrd erq8(U\x08\x00\x00\x00\x00\x00\x1d54q9(h\x11U\x03MWpq:tq;tq<QU\x05DEBUGq= (U\x08\x00\x00\x00\x00\x00\x1d55q>(h\x11U\x03MWpq?tq@tqAQU\nmeta_typesqB( }qC(U\npermissionqDU\x11Add TextQuestionsqEU\x04nameqFU\x0cTextQuestionqGU\x07productqHU\x07QSurveyqIU\x 06actionqJU3manage_addProduct/QSurvey/TextQuestionClass_factoryqKu}qL(hDU\x1 bAdd MultipleChoiceQuestionsqMhFU\x16MultipleChoiceQuestionqNhHhIhJU=manage_addPr oduct/QSurvey/MultipleChoiceQuestionClass_factoryqOu}qP(U\nvisibilityqQU\x06 GlobalqRU\ninterfacesqS]qT(cInterface.iclass\nInterface\nqUoqV}qW(U\x11_Inte rface__attrsqX}qY(U\nwl_getLockqZ(cInterface.Method\nMethod\nq[o}q\\(U\x07__ doc__q]U6 Returns the locktoken identified by the locktokenuri q^U\x08optionalq_}q`U\x08requiredqa(U\tlocktokenqbtqcU\x08__name__qdU\nwl_ge tLockqeU\tinterfaceqfU\x12WriteLockInterfaceqgU\x07varargsqhNU\x06kwargsqiNU \npositionalqj(hbtqkubU\rwl_lockValuesql(h[o}qm(h]U_ Returns a sequence of locks. if \'killinvalids\' is true,\n invalid locks will be deletedqnh_}qoU\x0ckillinvalidsqpK\x00sha)hdU\rwl_lockValuesqqhfhghhNhiNhj(h ptqrubU\rwl_lockTokensqs(h[o}qt(h]Ue Returns a sequence of lock tokens. if \'killinvalids\' is true,\n invalid locks will be deletedquh_}qvhpK\x00sha)hdU\rwl_lockTokensqwhfhghhNhiNhj(hptqxubU\nwl_hasLo ckqy(h[o}qz(h]UU Returns true if the lock identified by the token is attached\n to the object. q{h_}q|hpK\x00sha(U\x05tokenq}tq~hdU\nwl_hasLockq\x7fhfhghhNhiNhj(h}hptq\x80 ubU\x0bwl_isLockedq\x81(h[o}q\x82(h]Uh Returns true if \'self\' is locked at all. If invalid locks\n still exist, they should be deleted.q\x83h_}q\x84ha)hdU\x0bwl_isLockedq\x85hfhghhNhiNhj)ubU\nwl_setLockq \x86(h[o}q\x87(h]U\xef Store the LockItem, \'lock\'. The locktoken will be used to fetch\n and delete the lock. If the lock exists, this MUST\n overwrite it if all of the values except for the \'timeout\' on the\n old and new lock are the same. q\x88h_}q\x89ha(hbU\x04lockq\x8atq\x8bhdU\nwl_setLockq\x8chfhghhNhiNhj(hbh\x 8atq\x8dubU\rwl_clearLocksq\x8e(h[o}q\x8f(h]Uc Deletes ALL DAV locks on the object - should only be called\n by lock management machinery. q\x90h_}q\x91ha)hdU\rwl_clearLocksq\x92hfhghhNhiNhj)ubU\x0cwl_lockItemsq\x93 (h[o}q\x94(h]U\xa1 Returns (key, value) pairs of locktoken, lock.\n\n if \'killinvalids\' is true, invalid locks (locks whose timeout\n has been exceeded) will be deletedq\x95h_}q\x96hpK\x00sha)hdU\x0cwl_lockItemsq\x97hfhghhNhiNhj(hptq\x98 ubU\nwl_delLockq\x99(h[o}q\x9a(h]U6 Deletes the locktoken identified by the locktokenuri q\x9bh_}q\x9cha(hbtq\x9dhdU\nwl_delLockq\x9ehfhghhNhiNhj(hbtq\x9fubuh]T\xd6\ x03\x00\x00 This represents the basic protocol needed to support the write lock\n machinery.\n\n It must be able to answer the questions:\n\n o Is the object locked?\n\n o Is the lock owned by the current user?\n\n o What lock tokens are associated with the current object?\n\n o What is their state (how long until they\'re supposed to time out?,\n what is their depth? what type are they?\n\n And it must be able to do the following:\n\n o Grant a write lock on the object to a specified user.\n\n - *If lock depth is infinite, this must also grant locks on **all**\n subobjects, or fail altogether*\n\n o Revoke a lock on the object.\n\n - *If lock depth is infinite, this must also revoke locks on all\n subobjects*\n\n **All methods in the WriteLock interface that deal with checking valid\n locks MUST check the timeout values on the lockitem (ie, by calling\n \'lockitem.isValid()\'), and DELETE the lock if it is no longer valid**\n\n q\xa0U\t__bases__q\xa1((hUoq\xa2}q\xa3(hX}q\xa4h]U\x00h\xa1)hdU\tInterfaceq\ xa5ubtq\xa6hdhgubaU\x06actionq\xa7U"manage_addProduct/OFSP/documentAddq\xa8U \npermissionq\xa9U Add Documents, Images, and Filesq\xaaU\x04nameq\xabU\rDTML Documentq\xacU\x07productq\xadU\x04OFSPq\xaeU\x08instanceq\xafcOFS.DTMLDocum ent\nDTMLDocument\nq\xb0u}q\xb1(hQhRhS]q\xb2hVah\xa7U\x1fmanage_addProduct/O FSP/imageAddq\xb3h\xa9h\xaah\xabU\x05Imageq\xb4h\xadh\xaeh\xafcOFS.Image\nIm age\nq\xb5u}q\xb6(hQhRhS]q\xb7hVah\xa7U+manage_addProduct/PythonScripts/pySc riptAddq\xb8h\xa9U\x12Add Python Scriptsq\xb9h\xabU\x0fScript (Python)q\xbah\xadU\rPythonScriptsq\xbbh\xafcProducts.PythonScripts.PythonSc ript\nPythonScript\nq\xbcutq\xbdU\x0corder_manageq\xbe(U\x08\x00\x00\x00\x00 \x00\x1d5;q\xbf(h\x11U\x03MWpq\xc0tq\xc1tq\xc2QU\x16copy_of_countableitemsq\ xc3(U\x08\x00\x00\x00\x00\x00\x1d56q\xc4(h\x11U\x03MWpq\xc5tq\xc6tq\xc7QU\x0 fbranch_questionq\xc8U\x00U\nsubmittextq\xc9U\x19Continue to next questionq\xcaU\x0emanage_optionsq\xcb(}q\xcc(U\x05labelq\xcdU\x08Contentsq\x ceU\x06actionq\xcfU\x0bmanage_mainq\xd0u}q\xd1(h\xcdU\x04Viewq\xd2h\xcfU\nin dex_htmlq\xd3u}q\xd4(U\x05labelq\xd5U\nTransitionq\xd6U\x06actionq\xd7U\x11t ransition_manageq\xd8u}q\xd9(h\xd5U\x11Sub-item_Sequenceq\xdah\xd7U\x0corder _manageq\xdbu}q\xdc(U\x05labelq\xddU\x0bButton_Textq\xdeU\x06actionq\xdfU%pr opertysheets/text_for_button/manageq\xe0u}q\xe1(U\x05labelq\xe2U\x04freqq\xe 3U\x06actionq\xe4U\x0bfrequenciesq\xe5utq\xe6U\x0bfrequenciesq\xe7(U\x08\x00 \x00\x00\x00\x00\x1d58q\xe8(h\x11U\x03MWpq\xe9tq\xeatq\xebQU\x13copy_of_freq uenciesq\xec(U\x08\x00\x00\x00\x00\x00\x1d57q\xed(h\x11U\x03MWpq\xeetq\xeftq \xf0QU\x11transition_manageq\xf1(U\x08\x00\x00\x00\x00\x00\x1d59q\xf2(h\x11U \x03MWpq\xf3tq\xf4tq\xf5QU\x17manage_changeTransitionq\xf6(U\x08\x00\x00\x00 \x00\x00\x1d5:q\xf7(h\x11U\x03MWpq\xf8tq\xf9tq\xfaQU\n__module__q\xfbU\x19*E LIY0U9FYpg1J7Ri7r2f5w==q\xfcutq\xfdt.N.')</li>
</ul>Could not load oid 3Á, pickled data in traceback info may contain clues </p> -->
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (4)
-
Allen Schmidt -
Chris McDonough -
Chris Muldrow -
Jim Washington